新知一下
海量新知
6 6 1 0 5 6 8

Go语言 | go version命令的高级用法

飞雪无情 | 最值得关注的技术、管理新知号 2020/08/31 12:55

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 named

executable 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”相关内容

更多“Go”相关内容

新知精选

更多新知精选