原来还可以这么做:go version 命令的高级用法

共 2462字,需浏览 5分钟

 ·

2020-09-07 09:48

go version这个命令相信大家已经非常熟悉了,使用它可以查看我们自己电脑上的Go SDK版本。

$ go version
go version go1.15 darwin/amd64

以上就是我们经常使用到的功能,可以查看自己的Go版本和系统架构的信息。
但是这其实是go version最基本的用法,因为我们没有为它提供更多的参数信息,所以它默认的打印的是go这个可执行文件的版本信息。

go version 用法

go这个命令工具,可以使用help子命令查看任意命令的帮助。

$ go help version

usage: go version [-m] [-v] [file ...]

Version prints the build information for Go executables.

Go version reports the Go version used to build each of the namedexecutable files.

If no files are named on the command line, go version prints its own
version information.

显示的帮助内容比较多,我截取一部分。从该命令的用法来看,它可以接受多个文件,用于打印这些文件的构建版本信息。现在我来通过一些例子演示该命令的高级用法。

查看任意文件

$ go version goimports
goimports: go1.13

传递goimports这个可执行文件的路径给go version命令,就可以打印出goimports这个可执行文件的构建版本信息,从结果看,我电脑里的goimports是使用go1.13版本构建的。

同样的,可以依次查看多个文件的构建版本信息。

$ go version goimports gocode
goimports: go1.13
gocode: go1.13

从结果看,这两个工具的构建版本一样,都是使用go1.13

小提示:传递给go version的文件要是绝对路径,以上示例是因为我正好在$GOBIN目录下,所以可以省略路径,直接使用文件名。

更简便的是,你还可以把一个目录传给go version,他可以打印出目录下所有可执行文件的构建信息。

$ go go version bin/
bin/basic: go1.13
bin/dlv: go1.13
bin/fillstruct: go1.13
bin/go-callvis: go1.13
bin/go-outline: go1.13
bin/go-symbols: go1.13
bin/gocode: go1.13
bin/gocode-gomod: go1.13
bin/godef: go1.13
bin/godoctor: go1.13
bin/goimports: go1.13
bin/golint: go1.14.4
bin/gomobile: go1.13
bin/gomodifytags: go1.13
bin/gopkgs: go1.13
bin/goplay: go1.13
bin/gorename: go1.13
bin/goreturns: go1.13
bin/gotests: go1.13
bin/main: go1.15
bin/protoc-gen-go: go1.13

查看go mod信息

通过go version命令可以查看一个可执行文件的go mod信息,相信不少人还不知道这一点,这可是一个核武器的功能。

$ go version -m gocode   
gocode: go1.13
    path    github.com/mdempsky/gocode
    mod github.com/mdempsky/gocode  v0.0.0-20190203001940-7fb65232883f  h1:ee+twVCignaZjt7jpbMSLxAeTN/Nfq9W/nm91E7QO1A=
    dep golang.org/x/tools  v0.0.0-20191018212557-ed542cd5b28a  h1:UuQ+70Pi/ZdWHuP4v457pkXeOynTdgd/4enxeIO/98k=

如上所示,只需要加一个-m标识就可以打印出go mod信息。比如gocode的,可以看出它的github地址是github.com/mdempsky/gocode,模块名也一样,并且依赖了golang.org/x/tools库,并且还显示了库的版本。

是不是非常清晰,当我们研究一个可执行文件的时候非常有用,因为你可以看到它的地址,它依赖了哪些第三方库。

不支持的文件

go version有这么好的功能,也是有限制的,它只能查看Go语言编译生成的可执行文件。这个相信从上面的示例中也可以看出来,因为显示的这些构建版本信息都是Go语言相关的,其他语言也没有这些,所以其他语言生成的文件也就无法支持。比如我以ping命令为例:

$ go version /sbin/ping
/sbin/ping: go version not found

提示找不到相关的go版本信息,这个是很正常的,因为ping不是Go编译生成的可执行文件。

小结

Go为我们提供了不少好用的工具,可能都隐藏在角落里,如果你仔细找,会有意想不到的收获。




推荐阅读



学习交流 Go 语言,扫码回复「进群」即可


站长 polarisxu

自己的原创文章

不限于 Go 技术

职场和创业经验


Go语言中文网

每天为你

分享 Go 知识

Go爱好者值得关注



浏览 20
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报