go get 獲得 golang.org 的項目


go get 用來動態獲取遠程代碼包的,目前支持的有BitBucket、GitHub、Google Code和Launchpad。這個命令在內部實際上分成了兩步操作:第一步是下載源碼包,第二步是執行go install。下載源碼包的go工具會自動根據不同的域名調用不同的源碼工具,對應關系如下:

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

go get 的參數說明:

-d 只下載不安裝
-f 只有在你包含了-u參數的時候才有效,不讓-u去驗證import中的每一個都已經獲取了,這對於本地fork的包特別有用
-fix 在獲取源碼之后先運行fix,然后再去做其他的事情
-t 同時也下載需要為運行測試所需要的包
-u 強制使用網絡去更新包和它的依賴包
-v 顯示執行的命令
注意,這里的 –v 參數對我們分析問題很有幫助。

參考:https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.3.md

 

國內由於牆,我們會收到 unrecognized import path 的錯誤,這時候我們如何通過命令行來執行 go get 呢?
這時我們會獲得類似如下錯誤:

go get -u -v golang.org/x/oauth2
Fetching https://golang.org/x/oauth2?go-get=1
https fetch failed.
import "golang.org/x/oauth2": https fetch: Get https://golang.org/x/oauth2?go-get=1: dial tcp 216.58.221.145:443: i/o timeout
package golang.org/x/oauth2: unrecognized import path "golang.org/x/oauth2"
localhost:~ ghj1976$

如果目錄下有以前的版本,則是如下情況:

go get -u -v golang.org/x/oauth2
Fetching https://golang.org/x/oauth2?go-get=1
https fetch failed.
import "golang.org/x/oauth2": https fetch: Get https://golang.org/x/oauth2?go-get=1: dial tcp 216.58.221.145:443: i/o timeout
golang.org/x/oauth2 (download)
Fetching https://golang.org/x/net/context?go-get=1
https fetch failed.
import "golang.org/x/net/context": https fetch: Get https://golang.org/x/net/context?go-get=1: dial tcp 216.58.221.145:443: i/o timeout
golang.org/x/net (download)
Fetching https://golang.org/x/oauth2/internal?go-get=1
https fetch failed.
import "golang.org/x/oauth2/internal": https fetch: Get https://golang.org/x/oauth2/internal?go-get=1: dial tcp 216.58.221.145:443: i/o timeout
golang.org/x/net/context
golang.org/x/oauth2/internal
golang.org/x/oauth2
localhost:~ ghj1976$

 

這時候我們需要設置代理。代理工具我推薦用 lantern https://github.com/getlantern/lantern

需要注意的是,它的代理地址是: http://127.0.0.1:8787   而不是 http://127.0.0.1:16823/ ,后一個是它的配置網站地址。

 

以mac為例, 在命令行 Terminal 中設置網絡代理,一般方法如下:

root@ed27c545f7af:~# cat ~/proxy.conf 
export http_proxy=http://172.17.42.1:8118
export https_proxy=$http_proxy
export ftp_proxy=$http_proxy
export rsync_proxy=$http_proxy
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"

參考:https://github.com/tools/godep/issues/154

win下 用 set 代理 export ,參考 https://groups.google.com/forum/#!topic/lantern-users-zh/FiywFrEHSHE 

刪除環境變量用

刪除:unset 變量名    參考 http://blog.csdn.net/debug_cpp/article/details/2679991 

當前系統上下文的環境設置可以用 env 命令查看。

image

https://code.google.com/p/go/issues/detail?id=2919

這步代理設置后,我們可以用 wget 命令去試驗效果。參考: https://github.com/getlantern/lantern/issues/3341 

 

 

另外,go get 使用的 git 、mercurial、svn 設置代理的方法請參考:

https://github.com/golang/go/wiki/GoGetProxyConfig 

以我們最常用的 git 為例,

在終端設置:
git config --global http.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080

默認不設置代理:
git config --global --unset http.proxy
git config --global --unset https.proxy

查看已經設置的值:

git config http.proxy

 

參考: http://blog.csdn.net/dengbin9009/article/details/38058153 

 

配置完成后,以下載 golang.org/x/net 為例,執行的返回值如下:

go get -u -v  golang.org/x/net
Fetching https://golang.org/x/net?go-get=1
Parsing meta tags from https://golang.org/x/net?go-get=1 (status code 200)
get "golang.org/x/net": found meta tag main.metaImport{Prefix:"golang.org/x/net", VCS:"git", RepoRoot:"https://go.googlesource.com/net"} at https://golang.org/x/net?go-get=1
golang.org/x/net (download)
package golang.org/x/net: no buildable Go source files in /Users/ghj1976/project/mygocode/src/golang.org/x/net
localhost:text ghj1976$

 

我們可以看到其實是到 https://go.googlesource.com/text/ 這樣的地址去下載源碼的。中間涉及到跳轉和git下載,所以 要注意, 網絡請求的 http_proxy  和 git 的 代理 都需要設置才可以。


免責聲明!

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



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