Go 應用程式構建淺析
來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。要理解並靈活運用一個語言,我覺得有必要瞭解其構建應用程式的內部機制。經過這段時間對GO的接觸,個人對GO構建程式的方式挺滿意:簡單、直接、靈活。下面就對GO語言構建應用程式的方法進行一個淺顯的分析。
構建一個GO項目,我們只需設定好工程工作目錄,並在該目錄下建立名為src的檔案夾,然後將你的源檔案放到src下就行了。為便於理解,這裡給出一個簡單項目的例子進行具體說明。
環境變數:GOPATH =path/to/GoPro:$GOPATH
GoPro/
bin/
hello
pkg/
linux_amd64/
example/
mymath.a
src/
example/
mymath/
sqrt.go //package mymath
hello/
test.go //package main,其中用到了mymath包
操作命令:
go run: 在當前檔案夾下運行應用程式,需指明路徑
go build: 在當前檔案夾下構建應用程式,如不指明路徑則預設build當前檔案下go檔案
go install: 在pkg下產生相應的包,如果是main包,則在bin下產生相應的可執行檔,如果沒有指明目錄則預設install目前的目錄下的包。
e.g. 在
src/example/hello/目錄下運行
go run test.go //直接運行
go build test.go //產生可執行檔 test 在任意目錄下運行:
go install example/mymath //在pkg裡產生相應CPU架構的包, e.g. pkg/linux_amd64/example/mymath.a
go install example/hello //在bin裡產生可執行檔,e.g. bin/hello
GO 正式版裡對編譯、連結這些操作進行了簡化,直接用 go+
cmd 形式的指令就行。但是,瞭解Go的編譯、連結過程能更好的理解GO是如何來構建應用的。GO 對各個CPU架構有不同的編譯器、連結器(這裡指的是go內建的編譯器,當然也可以用gccgo進行編譯連結,這不詳述了),e.g. X86_64架構的編譯命令是 6g,連結是6l。現在我們回過頭來看
go install 這個命令,通過運行
go install -n example/mymath,我們看到其實裡面就是調用了
6g,然後用
pack命令把編譯出來的目標檔案打包到
mymath.a;再運行一下
go install -n example/hello,我們看到依次調用了
6g、
pack、
6l命令,即
6g編譯出
_go_.6檔案,再
pack成
hello.a包,最後連結成
hello。另外,
go install/build/run 等命令內建有類似 Makefile 的依賴更新檢查機制,如果源檔案沒有更改,不會再重新編譯。