golang學習筆記 go 相關命令

go build 命令一些可選項的用途和用法linux

在運行go build命令的時候,默認不會編譯目標代碼包所依賴的那些代碼包。固然,若是被依賴的代碼包的歸檔文件(*.a)不存在,或者源碼文件有了變化,那麼它仍是會被編譯。git

若是要強制編譯它們,能夠在執行命令的時候加入標記-a,此時,不但目標代碼包老是會被編譯,它所依賴的代碼包也總會被編譯,即便依賴的是標準庫中的代碼包也是如此。github

另外,若是不但要編譯依賴包,還要安裝它們的歸檔文件,能夠加入標記-i.golang

如何肯定哪些代碼包被編譯?安全

  1. 運行go build時加入標記-x, 這樣能夠看到go build命令具體執行了哪些操做,也能夠加入標記-n, 這樣能夠只查看具體操做而不執行它們。
  2. 運行go build命令時加入標記-v,這樣能夠看到go build命令編譯的代碼包的名稱,它與-a 標記搭配使用。

go get網絡

go get是自動從一些主流公用代碼倉庫(如Github)下載目標代碼包,並把它們安裝到環境變量GOPATH包含的第一個工做區的相應目錄中。若是存在環境變量GOBIN,那麼僅包含命令源碼文件的代碼包會被安裝到GOBIN指向的那個目錄。架構

最多見的幾個標記有下面幾種:ide

-u :下載並安裝代碼包,不論工做區中是否已經存在它們。工具

-d :只下載代碼包,不安裝代碼包。測試

-fix:在下載代碼包後先運行一個用於根據當前Go 語言版本修正代碼的工具,而後再安裝代碼包。

-t:同時下載測試所需的代碼包

-insecure: 允許經過非安全的網絡協議下載和安裝代碼。HTTP就是這樣的協議

go語言官方提供的go get命令是比較基礎的,其中並無提供依賴管理的功能。目前GitHub上有不少提供了這類功能的第三方工具,如glide、gb以及官方出品的dep,vgo等等,它們在內部大都會直接使用go get

對代碼包的遠程導入路徑進行自定義的方法是: 在該代碼包中的庫源碼文件的包聲明語句的右邊加入註釋,以下:

package semaphore //import "golang.org/x/sync/semaphore"

這個代碼包本來的完整導入路徑是 github.com/golang/sync/semaphore.這與實際存儲它的網絡地址對應的。該代碼包的源碼實際存在GitHub的golang組的sync代碼倉庫的semaphore目錄下。而加入導入註釋以後,用如下命令便可下載並安裝該代碼包了:

go get golang.org/x/sync/semaphore

而go語言官網golang.org下的路徑/x/sync/semaphore並非存放semaphore包的真實地址。咱們稱之爲代碼包的自定義導入路徑。

不過,這還須要在golang.org這個域名背後的服務端程序上,添加一些支持纔可能使用這條命令成功.

請參考: https://github.com/hyper0x/go_command_tutorial/blob/master/0.3.md

 

歸檔文件存放的位置和規則

源碼文件會以代碼包的形式組織起來,一個代碼包其實就對應一個目錄。安裝某個代碼包而產生的歸檔文件是與這個代碼包同名的。

放置它的相對目錄就是該代碼包的導入路徑的直接父級。如,一個已存在的代碼包的導入路徑是:

github.com/labstack/echo  

 

那麼執行命令

go install github.com/labstack/echo

生成的歸檔文件的相對目錄就是github.com/labstack,文件名爲echo.a

順便說下,上面這個代碼包的導入路徑還有另一層含義,那就是:該代碼包的源碼文件存在於Github網址的labstack組的代碼倉庫echo中

歸檔文件的相對目錄與pkg目錄之間還有一級目錄,叫作平臺相關目錄。平臺相關目錄的名稱是由build(也稱爲「構建」)的目標操做系統、下劃線和目標計算架構的代碼組成的、

如,構建某個代碼包的目標操做系統是linux,目標計算架構是64位,那麼對應的平臺相關目錄就是linux_amd64.

所以,上述代碼包的歸檔文件就會被存放在當前工做區的子目錄:

pkg/linux_amd64/github.com/labstack中

相關文章
相關標籤/搜索