國內使用 dep 可能同步包會很慢或直接失敗,所以我們要設定代理
新手請直接學習該工具,點選這裡,但如果想試試 dep,本文可作為參考。
- 確保您已擁有十八般武藝,能夠自由穿梭 internet
- 讓
iTerm
支援使curl
,wget
,brew
等 應用程式 會呼叫 http_proxy 和 https_proxy 這兩環境變數進行代 -
Mac 環境下 iTerm 具體操作:
-
安裝privoxy,作用:使請求轉為http請求從而使用 http代理
brew install privoxy
-
設定 http代理
export http_proxy=http://127.0.0.1:8087 export https_proxy=$http_proxy
-
- 配置privoxy
vim /usr/local/etc/privoxy/config # 寫入 listen-address 127.0.0.1:8087 forward-socks5 / 127.0.0.1:1080 . forward 192.168.*.*/ . forward 10.*.*.*/ . forward 127.*.*.*/ #儲存並啟動privoxy brew services start privoxy
- 代理是否生效,可使用
curl ip.gs
,如:curl ip.gs ... Current IP / 當前 IP: 45.**.**.*** ISP / 運營商: linode.com City / 城市: Dallas Texas Country / 國家: United States # 現在使用的美國IP ...
以上是我的實踐過程,您的實踐過程可能會遇到一些問題,別怕,我也是一個一個坑過來的。
- brew install dep
brew install dep
如果您之前未使用任何包管理工具,那太好了,不會受其它 包管理思想 影響,如果有其它包使用經驗 比如
npm
||composer
,那太好了,可以研究對比下不同思想。
- 建立一個專案
$ mkdir -p $GOPATH/src/github.com/me/example $ cd $GOPATH/src/github.com/me/example
- 將初始化專案
$ dep init $ ls Gopkg.toml Gopkg.lock vendor/
- 各個檔案的作用
- Gopkg.toml 用於調整Gopkg.lock已同步的一些包,如版本高了,在這個檔案設定對應版本,執行命令後,就同步到Gopkg.lock。 有其它包管理工具的注意了 跟
composer
的 composer.json 和npm
的 package.json 不一樣,它不是主要依賴次檔案同步管理包,這個檔案只是作為 調整,調整,調整!相信您已經記住了。 - Gopkg.lock 根據專案程式碼裡面的
import
和 Gopkg.toml檔案,獲取相關依賴,最後寫入到 專案 vendor/目錄下。
- Gopkg.toml 用於調整Gopkg.lock已同步的一些包,如版本高了,在這個檔案設定對應版本,執行命令後,就同步到Gopkg.lock。 有其它包管理工具的注意了 跟
Go 語言講求沒用到的東西,就不應該存在在程式碼裡面,所以 dep 包管理工具和其它語言的包管理工具不一樣,它根據您專案裡用到什麼第三方包,來生成對應的依賴配置檔案Gopkg.lock,如果配置檔案的軟體包存在問題,則透過Gopkg.toml檔案調整,比如第三方軟體包版本高了,需要指定某個版本,那麼在Gopkg.toml檔案寫入相關配置,然後 透過
dep ensure -update -v
更新即可,加-v
可以看到執行過程資訊。
dep ensure
同步Gopkg.toml檔案修改的配置,加上-update
則是即同步也更新各個依賴。dep ensure -add github.com/XXX/XX
新增新依賴項,比如官方文件的例子:$ dep ensure -add github.com/pkg/errors
成功的話,會更新Gopkg.lock檔案和vendor/目錄,並會寫入配置約束github.com/pkg/errors到Gopkg.toml檔案。如果你程式碼裡面沒有用這個第三方依賴包(import),它還會報告一個警告:
"github.com/pkg/errors" is not imported by your project, and has been temporarily added to Gopkg.lock and vendor/. If you run "dep ensure" again before actually importing it, it will disappear from Gopkg.lock and vendor/.
所以,我覺得沒有必要透過這命令來新增依賴,直接在程式碼裡面
import github.com/pkg/errors
,再執行dep ensure
豈不美哉?!- 當之前用過的依賴包,後面程式碼沒再使用過,執行
dep ensure [-update]
會刪除在Gopkg.lock的配置和vendor/裡面的檔案,反之 新新增的包執行後,則會新增到Gopkg.lock的配置和vendor/裡面。
required
,這等同.go
檔案中的import
於語句ignored
,我的理解是忽略某些依賴包[[constraint]]
,定義指定依賴的配置規則[[override]]
,等同於[[constraint]]
,但它的作用是調整某些依賴包,比如版本下調。[prune]
,用於管理應從中刪除的檔案型別vendor/
例:我使用 iris 框架寫 web 專案,結果 iris 包的依賴包升級後出現寫不相容bug,我需要調整依賴包版本,於是我的 Gopkg.toml檔案如下:
...
[[constraint]]
name = "github.com/kataras/iris"
version = "11.1.0"
[[override]]
name = "github.com/flosch/pongo2"
branch = "master" # master 分支已修復不相容bug
...
官方文件,有條件的朋友最好仔細看看該文件。
#檢視當前依賴
$ dep status
Gopkg.lock is out of sync with imports and/or Gopkg.toml. Run `dep check` for details.
PROJECT MISSING PACKAGES
input-digest mismatch
#排查問題
$ dep check
# Gopkg.lock is out of sync:
github.com/kataras/iris: in Gopkg.lock s input-imports, but neither imported nor required
#同步更新
$ dep ensure -update -v
Warning: the following project(s) have [[constraint]] stanzas in Gopkg.toml:
✗ github.com/kataras/iris
✗ github.com/pkg/errors
However, these projects are not direct dependencies of the current project:
they are not imported in any .go files, nor are they in the 'required' list in
Gopkg.toml. Dep only applies [[constraint]] rules to direct dependencies, so
these rules will have no effect.
Either import/require packages from these projects so that they become direct
dependencies, or convert each [[constraint]] to an [[override]] to enforce rules
on these projects, if they happen to be transitive dependencies.
Root project is "chuizi"
1 transitively valid internal packages
1 external packages imported from 1 projects
(0) ✓ select (root)
(1) ? attempt github.com/dgrijalva/jwt-go with 1 pkgs; 20 versions to try
(1) try github.com/dgrijalva/jwt-go@v3.2.0
(2) ✗ github.com/dgrijalva/jwt-go@v3.2.0 not allowed by constraint master:
...
(1) try github.com/dgrijalva/jwt-go@master
(1) ✓ select github.com/dgrijalva/jwt-go@master w/1 pkgs
✓ found solution with 1 packages from 1 projects
Solver wall times by segment:
b-source-exists: 1.506033451s
b-list-versions: 1.199125146s
b-list-pkgs: 168.073552ms
b-gmal: 146.433008ms
satisfy: 578.332µs
new-atom: 307.683µs
select-root: 86.261µs
select-atom: 78.903µs
other: 13.765µs
TOTAL: 3.020730101s
#再檢視當前依賴狀態
$ dep status
PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED
github.com/dgrijalva/jwt-go branch master branch master 5e25c22 5e25c22 1
本作品採用《CC 協議》,轉載必須註明作者和本文連結