golang日常开发系列之三–常用命令

go语言作为一门相对较新的语言,相比c++有着更丰富的工具链。语言本身支持测试、模块管理、profile等功能。接下来总结不同场景下的常用命令

golang模块管理

在go发展早期,曾经有好几种不同的模块管理工具,直到go 1.13之后,go modules正式成为官方"钦定"的模块管理工具。

模块初始化

cd <module path> 			            # 进入module path 
go mod init <模块名>				      # 初始化模块,这一步会生成go.mod文件
go mod tidy 				              # 更新go.mod(去掉无用module, 新增必要module)

golang测试

cd <module_path> go test ./...                 # 运行所有packages下的单元测试
go test . 				            # 运行当前package下的单元测试
go test -v . 			            # 运行当前package下的单元测试(添加verbose信息)
go test -run=<regrep> .       # 运行指定的单测,可通过正则表达式过滤
go test -bench -run=None      # 运行基准测试

添加依赖

go get -u <依赖库>
go mod tidy

替换依赖

# 修改go.mod文件,替换其中的import path(常用于测试)
replace github.com/hashicorp/memberlist => github.com/pilosa/memberlist v0.1.4-0.20190415211605-f6512523c021
  1. go build go build -o main.go # 编译代码并指定输出二进制文件 go build -gcflags “-N -l” main.go # 关闭内联优化

  2. go tool go tool pprof ./bin/ck_sinker sinker.profile # 从profile文件生成调用图 go-torch ./bin/ck_sinker sinker.profile # 从profile文件生成火焰图
    go tool pprof http://202.168.119.22:8128/debug/pprof/profile #从url生成profile

go tool pprof -http=0.0.0.0:8129 /home/liyang/pprof/pprof.ck_sinker_new.samples.cpu.001.pb.gz # 从url生成各种图 参考这里 https://blog.golang.org/pprof

  1. dlv dlv exec # 调试二进制文件 dlv test . # 调试单测文件 dlv attach # 调试正在运行的进程 dlv core # 查看core文件

################ golang远程调试 ################ dlv attach pidof vertamedia-clickhouse-plugin_linux_amd64 –headless –api-version=2 –log –listen=:8181 # 开启dlv server dlv attach pidof clickhouse_manager_ly –headless –api-version=2 –log –listen=:8181 # 开启dlv server dlv connect localhost:8181 # dlv client连接dlv server