go标准命令详解


Go语言的1.5版本在标准命令方面有了重大变更。这倒不是说它们的用法有多大的变化,而是说它们的底层支持已经大变样了。让我们先来对比一下$GOROOT/pkg/tool/<平台相关目录>中的内容。以下简称此目录为Go工具目录。

插播: 平台相关目录即以<GOOS>_<GOARCH>命名的目录,用于存放因特定平台的不同而不同的代码包归档文件或可执行文件。其中,代表特定平台的操作系统代号,而<GOARCH>则代表特定平台的计算架构代号。使用go env命令便可查看它们在你的计算机中的实际值。

1.4版本的Go工具目录的内容如下:

5a        5l        6g        8c        addr2line dist      objdump   tour
5c        6a        6l        8g        cgo       fix       pack      vet
5g        6c        8a        8l        cover     nm        pprof     yacc

下面是Go 1.5版本的:

addr2line asm       compile   dist      fix       nm        pack      tour      vet
api       cgo       cover     doc       link      objdump   pprof     trace     yacc

可以看到,1.5版本的目录内容精简了不少。这是因为Go 1.5的编译器、链接器都已经完全用Go语言重写了。而在这之前,它们都是用C语言写的,因此不得不为每类平台编写不同的程序并生成不同的文件。例如,8g、6g和5g分别是gc编译器在x86(32bit)、x86-64(64bit)和ARM计算架构的计算机上的实现程序。相比之下,用Go语言实现的好处就是,编译器和链接器都将是跨平台的了。简要来说,Go 1.5版本的目录中的文件compile即是统一后的编译器,而文件link则是统一后的链接器。

本教程并不会讲解Go语言的编译器、链接器以及其它工具是怎样被编写出来的,并只会关注于怎样用好包含它们在内的Go语言自带的命令和工具。

为了让讲解更具关联性,也为了让读者能够更容易的理解这些命令和工具,本教程并不会按照这些命令的字典顺序描述它们,而会按照我们在实际开发过程中通常的使用顺序以及它们的重要程度来逐一进行说明。现在,我们就先从go build命令开始。