![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cGcq5iN5MjMyITZ5MjMwEGM4I2YyYzX0ATN0kDMxEzLcdDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.jpg)
3、Go版本管理工具
- 1、Go版本管理工具
- 2、常用Go命令
- 2.1 常用命令汇总
- 2.2 go fmt
- 2.3 go install
- 2.4 go tool
- 2.5 go get
- 2.6 go build
1、Go版本管理工具
Go也有支持多版本管理的工具,例如:gvm(https://github.com/moovweb/gvm)
使用方式如下:
- 安装gvm
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
- 安装
gvm install
- 切换go版本
gvm use go1.18 # 使用参数 --default,可以每次启动不需要调用use
2、常用Go命令
2.1 常用命令汇总
-
: 获取Go版本go version
-
: 查看Go帮助命令go help
-
: 获取远程包(需提前安装go get
或git
)hg
-
: 编译并生成可执行程序go build
-
: 直接运行程序go run
-
: 格式化源码go fmt
-
: 编译包文件以及整个程序go install
-
: go原生提供的单元测试命令go test
-
: 移除当前源码包和关联源码包里编译生成的文件go clean
-
: 升级Go版本时,修复旧版代码go tool
-
:开启一个本地80端口的web文档godoc -http:80
-
:调试Go编译出来的文件gdb 可执行程序名
2.2 go fmt
go fmt
命令可以格式化代码文件:
命令格式:使用go fmt命令,其实是调用了gofmt,而且需要参数-w,否则格式化结果不会写入文件
go fmt
示例:格式化整个项目
gofmt -w -l src
常见参数:
-
: 显示那些需要格式化的文件-l
-
: 把改写后的内容直接写入到文件中,而不是作为结果打印到标准输出。-w
-
: 添加形如"a[b:len(a)] -> a[b:]"的重写规则,方便我们做批量替换-r
-
: 简化文件中的代码-s
-
: 显示格式化前后的diff而不是写入文件,默认是false-d
-
: 打印语法错误到标准输出。无此参数只会打印不同行的前10个错误。-e
2.3 go install
go install
命令用来生成项目的可执行文件。进入对应的go文件所在的目录执行命令可以直接生成一个可执行文件在bin目录,如图:
注意:
- 添加参数
,可以查看该命令底层执行信息-v
- 如果
中引入并使用了main.go
包,则该包的内容也被会安装进bin目录中expl
- go文件中如果没有
函数无法执行,这样的文件称之为应用包,会被编译为main
文件,并生成在pkg文件夹中.a
注意:
没有开启
go mod
时,使用上述命令需要配置
GOPATH
,否则会报:
no install location
。
2.4 go tool
go tool下聚集了很多命令,主要有2个,即fix和vet:
-
:用来修复以前老版本的代码到新版本go tool fix .
-
:分析当前目录的代码是否正确go tool vet directory|files
2.5 go get
go get
用来获取远程仓库中的包,使用该命令前必须配置GOPATH,而且依据不同的源码网站,还要安装不同的版本管理工具,比如从github上使用
go get
需要额外安装git。
示例:
下载包:添加 -u 参数可以自动更新包和依赖
go get github.com/**/**
使用包:与普通包使用方式一致
import "github.com/****/****"
go get
本质上可以理解为通过源码工具clone下代码后,执行了
go install
。
由于一些原因,有的包无法下载,如包
"golang.org/x/sync/syncmap"
,可以在src目录下执行下面的操作:
mkdir -p golang.org/x/
cd golang.org/x/
git
2.6 go build
go build
用于编译代码,在编译过程中,会同时编译与之相关联的包。
- 如果是main包,执行
之后,会在当前目录下生成一个可执行文件。如果你需要在$GOPATH/bin下生成相应的文件,需要执行go build
,或者使用go install
go build -o 路径/a.exe
- 如果是普通包,执行go build之后,它不会产生任何文件
- 该命令默认会编译当前目录下的所有go文件,如果只想编译某个文件,可使用
go build exp.go
-
会忽略目录下以go build
或_
开头的go文件.
如果go build报错:
/usr/lib/go-1.10/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/tmp/go-link-008006128/000026.o: In function _cgo_05dc84caff82_Cfunc_sysconf': /tmp/go-build/cgo-gcc-prolog:32: multiple definition of_cgo_05dc84caff82_Cfunc_sysconf’
/tmp/go-link-008006128/000024.o:/tmp/go-build/cgo-gcc-prolog:32: first defined here
collect2: error: ld returned 1 exit
linux: export CGO_ENABLED=0
windows : cmd: set CGO_ENABLED=0
windows : powershell:$env:CGO_ENABLED=0