go 安装与配置和常用命令

go 安装与配置

安装

sudo pacman -S go

也可以使用goup安装器安装

配置

#编辑 env 文件
vim .config/go/env

添加下面内容

GO111MODULE=on                                              #开启gomod
GOPATH=/angus/Go                                            #设置gopath
GOPROXY=https://goproxy.cn,direct            #设置goproxy(代理源)

查看环境变量

go env
# 查看gomod gopath goproxy是否设置正确

gopath

GOPATH 是 Go语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录,所下载的包都保留在gopath指向的目录

goproxy源

# 1. 七牛 CDN
go env -w  GOPROXY=https://goproxy.cn,direct

# 2. 阿里云
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct

# 3. 官方
go env -w  GOPROXY=https://goproxy.io,direct

常用命令

  • 包管理
go mod init                           # 初始化包管理配置,这一步会在module根目录下生成go.mod文件
go mod tidy                           # 更新包管理配置go.mod(去掉无用module, 新增必要module)
go get -u github.com/hashicorp/memberlist         # 添加包依赖
go mod edit -replace github.com/hashicorp/memberlist => github.com/pilosa/memberlist@v0.1.4-0.20190415211605-f6512523c021                     # 替换依赖库。但是module中的代码扔可以原依赖库的方式使用新依赖库。
  • 编译
go build                                # 编译当前目录所在package
go build -o <bin> main.go       # 编译代码并指定输出二进制文件
go build -gcflags "-N -l" main.go      # 编译时关闭内联优化
go clean        #删除编译生成的可执行文件
  • 测试
# 读取源码目录下面名为 *_test.go 的文件,生成并运行测试用的可执行文件
go test ./...                      # 运行module下所有单测。一个module对应一个go.mod文件
go test .                         # 运行package下所有单测。一个package对应一个目录
go test -v .            # 添加verbose信息,会输出日志等信息
go test -run=`<regexp> `.          # 运行符合正则表达式的的单测
go test -bench -run=None           # 运行基准测试
  • 调试
# 需要安装dlv go install github.com/go-delve/delve/cmd/dlv@latest
dlv exec <bin> -- arg1 arg2 ...      # 调试运行binary文件
dlv test .            # 调试当前module的测试代码
dlv attach <pid>         # 调试正在运行的进程
dlv core `<bin>` `<core>`    # 调试core文件

# 远程调试
dlv attach <pid> --headless --api-version=2 --log --listen=:8181  ## server端
dlv connect <server_host>:8181           ## client端
  • 调优
go tool pprof http://host:port/debug/pprof/profile  # 通过net/http/pprof采集profile并下载到本地
go tool pprof -<host>:<port> <profile_file>         # 通过浏览器查看profile.