Go語(yǔ)言的1.5版本在標(biāo)準(zhǔn)命令方面有了重大變更。這倒不是說(shuō)它們的用法有多大的變化,而是說(shuō)它們的底層支持已經(jīng)大變樣了。讓我們先來(lái)對(duì)比一下$GOROOT/pkg/tool/<平臺(tái)相關(guān)目錄>中的內(nèi)容。以下簡(jiǎn)稱此目錄為Go工具目錄。
插播:平臺(tái)相關(guān)目錄即以go env命令便可查看它們?cè)谀愕挠?jì)算機(jī)中的實(shí)際值。
1.4版本的Go工具目錄的內(nèi)容如下:
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版本的目錄內(nèi)容精簡(jiǎn)了不少。這是因?yàn)镚o 1.5的編譯器、鏈接器都已經(jīng)完全用Go語(yǔ)言重寫(xiě)了。而在這之前,它們都是用C語(yǔ)言寫(xiě)的,因此不得不為每類平臺(tái)編寫(xiě)不同的程序并生成不同的文件。例如,8g、6g和5g分別是gc編譯器在x86(32bit)、x86-64(64bit)和ARM計(jì)算架構(gòu)的計(jì)算機(jī)上的實(shí)現(xiàn)程序。相比之下,用Go語(yǔ)言實(shí)現(xiàn)的好處就是,編譯器和鏈接器都將是跨平臺(tái)的了。簡(jiǎn)要來(lái)說(shuō),Go 1.5版本的目錄中的文件compile即是統(tǒng)一后的編譯器,而文件link則是統(tǒng)一后的鏈接器。
本教程并不會(huì)講解Go語(yǔ)言的編譯器、鏈接器以及其它工具是怎樣被編寫(xiě)出來(lái)的,并只會(huì)關(guān)注于怎樣用好包含它們?cè)趦?nèi)的Go語(yǔ)言自帶的命令和工具。
為了讓講解更具關(guān)聯(lián)性,也為了讓讀者能夠更容易的理解這些命令和工具,本教程并不會(huì)按照這些命令的字典順序描述它們,而會(huì)按照我們?cè)趯?shí)際開(kāi)發(fā)過(guò)程中通常的使用順序以及它們的重要程度來(lái)逐一進(jìn)行說(shuō)明?,F(xiàn)在,我們就先從go build命令開(kāi)始。