Golang中自带的强大命令工具

在公司已经实习了十多天了,一只都是在看很多资料、文档、教程、公司项目源码,一直都没有时间写一些总结的笔记什么的,马上就要放春节了就比较轻松下来了,试着写一下Golang中特别好用的Go 命令行工具。

1. 工具总览

go提供了很多自带的命令行工具具体有如下几种:

Go is a tool for managing Go source code.

Usage:

    go <command> [arguments]

The commands are:

    bug         start a bug report
    build       compile packages and dependencies
    clean       remove object files and cached files
    doc         show documentation for package or symbol
    env         print Go environment information
    fix         update packages to use new APIs
    fmt         gofmt (reformat) package sources
    generate    generate Go files by processing source
    get         download and install packages and dependencies
    install     compile and install packages and dependencies
    list        list packages or modules
    mod         module maintenance
    run         compile and run Go program
    test        test packages
    tool        run specified go tool
    version     print Go version
    vet         report likely mistakes in packages

如果我们想要查看某个命令的详细情况可以使用命令:

$ go help [command]

这里我不会全部都讲,只会讲一些常用的好用的命令。

2. Go工作区结构

我们在安装go的开发环境的时候是要配置一个go的$GOPATH环境变量,$GOPATH环境变量是Go语言中非常重要也是非常核心的一个配置,这个环境变量有什么用呢?
目前我也是粗浅的学习了一点Go语言的只是,没有做过什么项目。
目前我认识到的$GOPATH有这么几点用法:

  • 在写Go语言时我们导入包时候会在GOPATH下的src目录下索引,同时GO也会在$GOROOTsrc目录下索引。
  • 在使用Go的命令时会把一些文件往$GOPATH目录下。

目前直观的感受也就只有这么多了,可以查考我找到一个老哥写的Gopath讲解:go入门–设置 GOPATH 有什么意义?

对于大多数的Go语言用户,只需要配置一个名叫GOPATH的环境变量,用来指定当前工作目录即可。当需要切换到不同工作区的时候,只要更新GOPATH就可以了。
配置$GOPATH环境变量:

  1. 在~/.bash_profile中添加
export GOPATH=$HOME/gobook
export PATH=${PATH}:${GOPATH}/bin
  1. 使用source命令加载配置配置文件
source ~/.bash_profile
2.0

Go中还比较重要的就是$GOPATH下的三个目录了:

  1. src 包含项目的源代码文件;
  2. pkg 包含编译后生成的包/库文件;
  3. bin 包含编译后生成的可执行文件。

其中src子目录用于存储源代码。每个包被保存在与$GOPATH/src的相对路径为包导入路径的子目录中。

3. go env

上面我们提到了很多的GO语言中需要用的到一些系统环境变量,GO语言中的环境变量是很多的,我们可以使用env命令来查看这些变量的值。

$ go env
...
GOPATH="/home/gopher/gobook"
GOROOT="/usr/local/go"
GOARCH="amd64"
GOOS="darwin"
GOCACHE="/Users/alphababy/Library/Caches/go-build"
...

不同的变量有不同的作用,上面列出来的几个是比较重要的:

  • GOOS 程序构建环境的目标操作系统
  • GOARCH 表示程序构建环境的目标计算架构
  • GOCACHE 参考go build命令中的讲解

这四个变量在我们编译go语言的时候会起作用。

4. go get

使用Go语言工具箱的go命令,不仅可以根据包导入路径找到本地工作区的包,甚至可以从互联网上找到和更新包。

使用命令go get可以下载一个单一的包或者用go get下载整个子目录里面的每个包。

一旦go get命令下载了包,然后就是安装包或包对应的可执行的程序。我们将在下一节再关注它的细节,现在只是展示整个下载过程是如何的简单。

go get命令支持当前流行的托管网站GitHub、Bitbucket和Launchpad,可以直接向它们的版本控制系统请求代码。对于其它的网站,你可能需要指定版本控制系统的具体路径和协议,例如 Git或Mercurial。

go get命令获取的代码是真实的本地存储仓库,而不仅仅只是复制源文件,因此你依然可以使用版本管理工具比较本地代码的变更或者切换到其它的版本。

一般我们在使用get命令的时候我们会使用-u -v两个参数,-u是表示我们始终使用该包的最新版本,-v表示我们在终端中打印出详细的获取信息,以免出错,但是要注意有可能在下载远程第三方包的时候涉及到科学上网的问题,一般我们可以借助一个工具叫 gopm

5. go build

build是go语言用来编译的命令。
例如: 我们在$GOPATH/src 目录下面新建test目录,然后新建文件main.go,并添加如类容:

《Golang中自带的强大命令工具》

然后我们在终端中进入到$GOPATH/src/test目录下面,执行

test$ go build
test$ ll
total 3920
drwxr-xr-x   5 alphababy  staff      160  2  2 11:28 .
drwxr-xr-x  12 alphababy  staff      384  2  1 14:56 ..
drwxr-xr-x   8 alphababy  staff      256  2  2 11:27 .idea
-rw-r--r--   1 alphababy  staff       76  2  2 11:27 main.go
-rwxr-xr-x   1 alphababy  staff  1999368  2  2 11:28 test

然后就会在$GOPATH/src/test目录下面生成一个可执行文件叫做 test

test$ ./test
hello world!

常用的又-o参数,-o表示我们指定一个生成的可执行文件的名称

test$ go build -o test.exe
test$ ll
total 7832
drwxr-xr-x   6 alphababy  staff      192  2  2 11:31 .
drwxr-xr-x  12 alphababy  staff      384  2  1 14:56 ..
drwxr-xr-x   8 alphababy  staff      256  2  2 11:27 .idea
-rw-r--r--   1 alphababy  staff       76  2  2 11:27 main.go
-rwxr-xr-x   1 alphababy  staff  1999368  2  2 11:28 test
-rwxr-xr-x   1 alphababy  staff  1999368  2  2 11:31 test.exe

可以看到生成了一个test.exe的可执行文件

转载
1.10 版本的另一项改进,这与 go build 命令有关。以前,如果我们要强行地重新构建所有相关的代码包,那么就需要在运行这个命令的时候追加标记“-a”。而现在,我们无需这样做了。go build 命令会根据源码文件内容、构建标记和编译元数据,自动地决定什么时候应该重新构建那些代码包。这项工作再也不需要人工干预了。

与此项改进相关的变化是,go build 命令现在总是会把最近的构建结果缓存起来,以便在将来的构建中重用。我们可以通过运行 go env GOCACHE 命令来查看缓存目录的路径。缓存的数据总是能够正确地反映出当时的源码文件、构建环境和编译器选项等的真实情况。一旦有任何变动,缓存数据就会失效,go build 命令就会再次真正地执行构建。因此,我们并不用担心缓存数据体现的不是实时的结果。实际上,这正是上述改进能够有效的主要原因。go build 命令会定期地删除最近未使用的缓存数据,但如果你想手动删除所有的缓存数据,运行一下 go clean -cache 命令就好了。

顺便说一下,对于测试成功的结果,go 命令也是会缓存的。运行 go clean -testcache 命令将会删除掉所有的测试结果缓存。不过别担心,这样做肯定不会删除任何的构建结果缓存,它们是两码事。

此外,设置环境变量 GODEBUG 的值也可以稍稍地改变 go 命令的缓存行为。比如,设置值为 gocacheverify=1 将会导致 go 命令绕过任何的缓存数据,而真正地执行操作并重新生成所有结果,然后再去检查新的结果与现有的缓存数据是否一致。

更多的信息信息可以查看官方文档或者这里还有这里

6. go run

一般我们使用ide来编程使用都会有一个运行,这里go语言给我们提供了这样的原生功能。

test$ go run main.go 
hello world!

这样我们就不用编译然后再运行了。

7. go fmt

在开发中,有一个良好的同一的代码风格是非常好的,这里go给我一个fmt工具自动的可以把我们的代码整理为go官方的推荐的风格。

这里吧我们的代码风格给该乱:

《Golang中自带的强大命令工具》

然后我们使用fmt工具自动整理代码风格。

test$ go fmt
main.go

《Golang中自带的强大命令工具》

可以看到风格就自动的调整了。

书籍推荐
Go命令教程

    原文作者:_AlphaBaby_
    原文地址: https://www.jianshu.com/p/1e415445cd3e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞