专栏首页飞雪无情的博客Go语言|go version命令的高级用法

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go语言·不常用的Go命令详解

    作者:孙飞撩技术 链接:http://www.jianshu.com/p/46c268e7a149 來源:简书 共3329字,阅读需8分钟 迁移自CSDN: $...

    企鹅号小编
  • 【保姆级教程】手把手教你进行Go语言环境安装及相关VSCode配置

    通过 右键我的电脑 >> 属性 >> 高级系统设置 >> 环境变量,可以查看你的环境变量:

    二十二画程序员
  • 神奇的go语言(高级应用)

    其实有了上一篇的基本语法,我们就可以做一些简单的事情,比如说文件服务器。或许大家有点不相信,没关系。下面开始用代码来说明问题,其实整个代码的内容不会超过十行。 ...

    李海彬
  • 『如何构建命令行工具:YiYi』

    谢伟
  • Go 1.16 中关于 go get 和 go install 你必须注意的地方

    Go (golang) 已于 18 日发布了 1.16 beta1 版本,至此其主体功能已经基本确定。我看大多数人都在关注 Go 在苹果(Apple) M1 上...

    Jintao Zhang
  • Go 1.16 中关于 go get 和 go install 你必须注意的地方

    Go (golang) 已于 18 日发布了 1.16 beta1 版本,至此其主体功能已经基本确定。我看大多数人都在关注 Go 在苹果(Apple) M1 上...

    郭旭东
  • 学Go习-安装教程&HelloWord

    Go(又称为Golang)是谷歌开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go于2009年11月正式宣布推出,成为开放源代码项目,并在...

    java技术爱好者
  • 自动化编排工具:Terraform 安装与使用采坑

    Terraform 是一种安全有效地构建、更改和版本控制基础设施的工具(基础架构自动化的编排工具)。Terraform 几乎可以支持所有市面上能见到的云服务。具...

    DevOps时代
  • go mod使用

    最近由于换工作,开始交接工作。整理以前的工作内容,由于组内就我一个在做go和大数据。 所以开发没有规划,当时是怎么快怎么来。go也是使用最传统的go path的...

    若与

扫码关注云+社区

领取腾讯云代金券