jinhailang / blog

技术博客:知其然,知其所以然
https://github.com/jinhailang/blog/issues
60 stars 6 forks source link

golang 开发辅助工具使用(持续更新) #6

Open jinhailang opened 7 years ago

jinhailang commented 7 years ago

go tool pprof

实时查看程序运行堆栈信息,收集性能数据,用于程序调优和问题跟踪。非常丰富方便。 1)导入包:_ "net/http/pprof" 2)在 main 函数添加以下代码

func main() {
    go func() {
        log.Println(http.ListenAndServe(":6060", nil))
    }()
    //todo
}

浏览器输入 http://localhost:6060/debug/pprof,可以查看相关运行信息。 更多功能

go tool trace

用于程序诊断的工具,更直观的展现程序运行过程,定位延迟,并行化和竞争异常代码。 简单实例:

1)

func main() {
    trace.Start(os.Stdout)
    // todo 
    trace.Stop()
}

2)数据收集: go run main.go > trace.out 3)查看: go tool trace trace.out

更多使用

gotrace 并发 3D 可视化

//todo

go tool vet

用来检查在编译阶段没有发现的错误,比如函数调用错误,错误的操作锁或者原子变量,对于写代码比较马虎的人来说,超级好用,可以避免很多细小的问题。当然,这只是一种辅助工具,发现的问题有限。

检查所有项:go tool vet -all ./*.go 输出结果:

jinhailang@jinhailang:~/work/purge$ go tool vet -all ./*.go
./purge_test.go:35: possible formatting directive in Log call
./purge_test.go:40: possible formatting directive in Log call
./purge_test.go:117: Println call ends with newline
./purge_test.go:179: possible formatting directive in Log call
./purge_test.go:180: possible formatting directive in Log call
./purge_test.go:181: possible formatting directive in Log call
./purge_test.go:182: possible formatting directive in Log call
./purge_test.go:185: possible formatting directive in Log call
./purge_test.go:193: possible formatting directive in Log call

更多使用

race的使用

数据竞争是并发系统中最常见和最难调试类型的错误之一。特别是在Golang中,由于goroutine的使用,这样的问题更容易出现,好在Golang提供了race这个功能。

go test -race mytest.go   
go run -race mytest.go 
go build -race mytest.go 
go install -race mytest.go 

这个参数会引发CPU和内存的使用增加,所以基本是在测试环境使用,不是在正式环境开启。 更多使用