# 標準命令詳解
Go語言的1.5版本在標準命令方面有了重大變更。這倒不是說它們的用法有多大的變化,而是說它們的底層支持已經大變樣了。讓我們先來對比一下`$GOROOT/pkg/tool/<平臺相關目錄>`中的內容。以下簡稱此目錄為Go工具目錄。
**插播:**平臺相關目錄即以<GOOS>_<GOARCH>命名的目錄,用于存放因特定平臺的不同而不同的代碼包歸檔文件或可執行文件。其中,<GOOS>代表特定平臺的操作系統代號,而<GOARCH>則代表特定平臺的計算架構代號。使用`go env`命令便可查看它們在你的計算機中的實際值。
1.4版本的Go工具目錄的內容如下:
```bash
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版本的:
```bash
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`命令開始。