【Go語言系列】go get 命令介紹


Go語言的代碼被托管於 Github.com 網站,該網站是基於 Git 代碼管理工具的,很多有名的項目都在該網站托管代碼。其他類似的托管網站還有 code.google.com、bitbucket.org 等。

這些網站的項目包路徑都有一個共同的標准,參見下圖所示。

 

 

go get 命令可以借助代碼管理工具通過遠程拉取或更新代碼包及其依賴包,並自動完成編譯和安裝。整個過程就像安裝一個 App 一樣簡單。

這個命令可以動態獲取遠程代碼包,目前支持的有 BitBucket、GitHub、Google Code 和 Launchpad。在使用 go get 命令前,需要安裝與遠程包匹配的代碼管理工具,如 Git、SVN、HG 等,參數中需要提供一個包名。


這個命令在內部實際上分成了兩步操作:第一步是下載源碼包,第二步是執行 go install。下載源碼包的 go 工具會自動根據不同的域名調用不同的源碼工具,對應關系如下:

  • BitBucket (Mercurial Git)
  • GitHub (Git)
  • Google Code Project Hosting (Git, Mercurial, Subversion)
  • Launchpad (Bazaar)

參數介紹:

-u 用於下載指定的路徑包及其依賴包,默認情況下,不會下載本地已經存在的,只會下載本地不存在的代碼包。就是口中常說的更新包 比如:go get -u github.com/jinzhu/gorm。會把最新的 gorm 包下載到你本地
-d 此命令僅僅是下載路徑包,而不會進行安裝。即不會執行 go install 命令
-t 讓命令程序同時下載並安裝指定的代碼包中的測試源碼文件中依賴的代碼包
-fix 讓命令程序在下載代碼包后先執行修正動作,而后再進行編譯和安裝。比如,我的代碼是用1.7 開發的,現在go 版本已經是1.13 了,有些包已經發生了變化,那么我們在使用go get命令的時候可以加入-fix標記。這個標記的作用是在檢出代碼包之后,先對該代碼包中不符合Go語言1.7版本的語言規范的語法進行修正,然后再下載它的依賴包,最后再對它們進行編譯和安裝。
-insecure 允許命令程序使用非安全的scheme(如HTTP)去下載指定的代碼包。如果你用的代碼倉庫(如公司內部的Gitlab)沒有HTTPS支持,可以添加此標記。請在確定安全的情況下使用它。(記得 使用工具 git 時,有個版本就是 http 升級為了https)
-v 打印出那些下載的代碼包的名字
-f 僅在使用-u標記時才有效。該標記會讓命令程序忽略掉對已下載代碼包的導入路徑的檢查。如果下載並安裝的代碼包所屬的項目是你從別人那里Fork過來的,那么這樣做就尤為重要了
-x 打印出整個過程使用了哪些命令

 

  • go get 下載的包保存在哪里呢?一般他會保存在這個目錄:$GOPATH/src , 若你有多個GOPATH(工作區),則會保存在第一個工作區中。獲取前,請確保 GOPATH 已經設置。Go 1.8 版本之后,GOPATH 默認在用戶目錄的 go 文件夾下。
  • go get 檢出或更新代碼包之后,它會尋找與本地已安裝Go語言的版本號相對應的標簽(tag)或分支(branch)。比如,本機安裝Go語言的版本是1.x,那么go get命令會在該代碼包的遠程倉庫中尋找名為“go1”的標簽或者分支。如果找到指定的標簽或者分支,則將本地代碼包的版本切換到此標簽或者分支。如果沒有找到指定的標簽或者分支,則將本地代碼包的版本切換到主干的最新版本。
  • go get 更新代碼包,更行代碼包后,所引用此包的其他代碼塊使用時都會更新。但是就是不會更新vendor(govendor 代碼包管理工具生成的文件夾)目錄中的代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM