Golang

Part 2

Posted by Dingding on July 28, 2019

相关资料

  • https://golang.org/doc/
  • https://golang.org/ref/spec 编程说明书
  • https://golang.org/doc/effective_go.html,建议通读一遍
  • http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/index.html 进阶阅读
  • https://golang.org/ref/mem 内测模型
  • https://itjumpstart.files.wordpress.com/2015/03/database-driven-apps-with-go.pdf 数据库使用说明
  • https://github.com/golang/go/wiki/CodeReviewComments 代码审核
  • https://blog.csdn.net/liigo/article/details/23699459 代码审核

  • https://making.pusher.com/golangs-real-time-gc-in-theory-and-practice/ 垃圾回收原理示意图

  • https://mycodesmells.com/post/accept-interfaces-return-struct-in-go 接口返回值

逃逸分析

  • go build -gcflags “-m -m” main.go
  • 为接口赋值会逃逸
  • 以变量作为长度参数创建数组会逃逸,如 make([]byte,mysize)

go get -d -v -u ./…

go get 不单单会 clone 代码到Gopath目录下,还会build可执行文件到gopath/bin目录下 -d 标志只下载代码包,不执行安装命令; -v 打印详细日志和调试日志。这里加上这个标志会把每个下载的包都打印出来;

./…这个表示路径,代表当前目录下所有的文件

go tool pprof

  • go tool pprof -alloc_space -cum -svg http://10.115.27.95:9453/debug/pprof/heap 分析 heap 信息,参数还有 –alloc_objects –use_space –use_object
  • go tool pprof http://10.110.135.163:9459/debug/pprof/profile 分析 CPU 信息

  • GODEBUG=gctrace=1 ./main |& gcvis 调试信息 https://github.com/davecheney/gcvis https://github.com/rcrowley/go-metrics

三色标记

三色标记只能保证,一个对象在GC开始阶段是不可达的,一定会被回收。 如果在GC过程中,变为不可达,不一定会被回收