| 不知不觉用 Go 开辟也两年多了. 筹备点履历汇总, 方便后面的同学能快速上手. 提要
 1. Go 安装
    2. Go ide 搭建
    3. Go modules 模块管理
    4. Go unit test
    5. Go debug 调试
    6. Go pprof 火焰图 
    7. Go online 调试
    8. Go future 思考
 
1. Go 安装
 Golang   官网 https://golang.org/
    Download 页面 https://golang.org/dl/
    Install  页面 https://golang.org/doc/install
 登录 Golang 官网. 假如访问有标题, 请激发这辈子最大潜力去深入突破此间魔障.
 别问
    问
    就是不合适
 别多想
    想
    就是没缘分
 然后[2019/10/21]点到下载页面, 这里下载的是 go1.12.12.linux-amd64.tar.gz
随后按照安装页面提示操纵. 这里简单梳理以下脚本
 通过 go version 查察安装版本
 
原本是想通过 window 平台带大家演示一遍提要中内容. 不过常常待在 ubuntu 旁边, 
只能顺手用 linux 环境给同学演示一遍. 故意人可自行选择环境实操, 思路都差不多.复制代码sudo rm -rf /usr/local/gosudo tar -C /usr/local -xzf go1.12.12.linux-amd64.tar.gzsudo vi /etc/profile    Shift + G    i    export PATH=$PATH:/usr/local/go/bin    ~    wq!source /etc/profile
2. Go ide 搭建
 Download VSCode https://code.visualstudio.com/
 这里推荐 VSCode 搭建 Golang 开辟换机, 下载 deb 包并安装.
 筹备下面环境
 
点击 [Install] -End-> [F1] -> [Go: Install/Update Tools] -> [全选] -> [确定]复制代码sudo dpkg -i code_1.39.2-1571154070_amd64.deb
大概齐都乐成后, 对着项目来下 [F5] 跑起来
 
别惊奇, 咱们的 IDE 已经 OK 了!
 3. Go modules 模块管理
 Go modules 是 Go 解决包依靠管理方面特别棒的一次实验. 这里带大家简单先用起来.
故意的同学可以查询更多的相关资料, 大概通过 go mod help 自行晋升. 开始准备素材
 code/arithmetic/div.go
 code/main.go复制代码package arithmeticimport "errors"// Div 除法操纵func Div(a, b int) (c int, err error) {    if b == 0 {        err = errors.New("divisor is 0")        return    }    c = a / b    return}
有了上面这些, 开始着手构建复制代码package mainimport (    "fmt"    "code/arithmetic")func main() {    println("Hello, 世界")    c, err := arithmetic.Div(1, 0)    fmt.Printf("c = %d, err = %+v\n", c, err)}
越纯粹越懂本身复制代码go mod init codego build./code
4. Go unit test
 code/arithmetic/div_test.go
 Go 中单元测试好简单, 特殊一点要求就是定名, 总结起来有下面几小点
    1. 文件命必须是 *_test.go
    2. 测试函数 func Test*(t *testing.T) { ... }
    3. 性能测试函数 func Benchmark*(b *testing.B) { for i := 0; i < b.N; i++ { ... } }
有测试比没有要好很多 /(ㄒoㄒ)/~~复制代码package arithmeticimport (    "testing"    "math/rand")func TestDiv(t *testing.T) {    var (        a, b, c int        err     error    )    a, b = 1, 2    c, err = Div(a, b)    t.Logf("a = %d, b = %d, c = %d, err = %+v", a, b, c, err)    a, b = 1, 0    c, err = Div(a, b)    t.Logf("a = %d, b = %d, c = %d, err = %+v", a, b, c, err)}func BenchmarkDiv(b *testing.B) {    for i := 0; i < b.N; i++ {        Div(rand.Int(), rand.Int())    }}
5. Go debug 调试
 别深究
    深究
    就是 F5 F10 F11 go -race
 6. Go pprof 火焰图
 筹备素材
 启动服务, 查察程序运行状态复制代码package mainimport (    "fmt"    "log"    "time"    "net/http"    _ "net/http/pprof"    "code/arithmetic")func main() {    println("Hello, 世界")    c, err := arithmetic.Div(1, 0)    fmt.Printf("c = %d, err = %+v\n", c, err)    for i := 0; i < 1000000; i++ {        go func() {            time.Sleep(time.Second * 10)        }()    }    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {})    err = http.ListenAndServe(":8088", nil)    if err != nil {        log.Fatalf("ListenAndServe: %+v\n", err)    }}
复制代码    go pprof debug http://127.0.0.1:8088/debug/pprof/
更加详细的可以一块查察一下 cpu 运行火焰图
 随后会生成一个 profile 相关文件, 用工具打开 pprof.code.samples.cpu.001.pb.gz复制代码go tool pprof http://127.0.0.1:8088/debug/pprof/profile -seconds 10
全有了, 是否为虎傅翼不知道, 但知道, 你应对标题标方式方法会多一些.复制代码go tool pprof -http=:8081 /home/zhi/pprof/pprof.code.samples.cpu.001.pb.gz
7. Go online 调试
 delve https://github.com/go-delve/delve
 抛开看日志, 也可以在服务摘除后, 通过 delve 举行 b r n c ...
 
佛度有缘人
 8. Go future 思考
 Go 很多理念都很平凡, 实现方面也很弃取, 没想到末了居然云云的着实, 开辟工程杠杠的. 
    个人觉得其一大亮点是为实际生产的工程师服务, 其次为呆板服务, 合理的解决二者的痛点.
 关于 Go 未来的思考, 很等候泛型模式的到来.
     
 
 
 
 
 来源:https://www.cnblogs.com/life2refuel/p/11729063.html
 |