本篇來聊聊
Go 語言 在 1.11 版本推出的
新功能 ,相信大家也許還不知道此功能是做什麼用的,我們來回顧看看在初學 Go 語言的時候,最令人困擾的就是
GOPATH
,所有的專案都必須要在 GOPATH 底下開發,然而在更久前還沒有 Vendor 時候,兩個專案用不同版本的同一個 Package 就必須要使用多個 GOPATH 來解決,但是隨著 Vendor 在 1.5 版的推出,解決了這問題,所以現在只要把專案放在 GOPATH 底下,剩下的 Package 管理都透過 Vendor 目錄來控管,在很多大型開源專案都可以看到把 Vendor 目錄放入版本控制已經是基本的 Best Practice,而 go module 推出最大功能用來解決 GOPATH 問題,也就是未來開發專案,
隨意讓開發者 clone 專案到任何地方都可以 ,另外也統一個 Package 套件管理,不再需要
Vendor
目錄,底下舉個實際例子來說明。
影片介紹
此影片同步在 Udemy 課程 內,如果有購買課程的朋友們,也可以在 Udemy 上面觀看,如果想學習更多 Go 語言教學,現在可以透過 $1800 價格購買。傳統 go vendor 管理
先看個例子:package main import ( "fmt" "github.com/appleboy/com/random" ) func main() { fmt.Println(random.String(10)) }將此專案放在
$GOPATH/src/github.com/appleboy/test
這是大家寫專案必定遵守的目錄規則,而 vendor 管理則會從
PackageManagementTools 選擇一套。底下是用
govendor 來當作例子
$ govendor init $ govendor fetch github.com/appleboy/com/random最後用
go build
產生 binary
$ go build -v -o main .如果您不在 GOPATH 裡面工作,就會遇到底下錯誤訊息:
Error: Package "xxxx" not a go package or not in GOPAT如果換到 Go 1.11 版本的 module 功能就能永久解決此問題
使用 go module
用 go module 解決兩個問題,第一專案內不必再使用 vendor 管理套件,第二開發者可以任意 clone 專案到任何地方,直接下 go build 就可以拿到執行檔了。底下是使用方式project --> main.go --> main_test.go初始化專案,先啟動
GO111MODULE
變數,在 go 1.11 預設是
auto
$ export GO111MODULE=on $ go mod init github.com/appleboy/project可以看到專案會多出一個
go.mod
檔案,用來記錄使用到的套件版本,如果本身已經在使用 vendor 管理,那麼
mod init
會自動將 vendor 紀錄的版本寫入到
go.mod
。接著執行下載
$ go mod download專案內會多出
go.sum
檔案,其實根本不用執行
go mod download
,只要在專案內下任何
go build|test|install
指令,就會自動將 pkg 下載到
GOPATH/pkg/mod
內
$ tree ~/go/pkg/mod/github.com/ /Users/mtk10671/git/go/pkg/mod/github.com/ └── appleboy └── com@v0.0.0-20180410030638-c0b5901f9622 ├── LICENSE ├── Makefile ├── README.md ├── array │ ├── array.go │ └── array_test.go ├── convert │ ├── convert.go │ └── convert_test.go ├── file │ ├── file.go │ └── file_test.go ├── random │ ├── random.go │ └── random_test.go └── vendor └── vendor.json目前 go module 還在實驗階段,如果升級套件或下載套件有任何問題,請透過底下指令將 pkg 目錄清空就可以了。
$ go clean -i -x -modcache
心得
由於 go module 的出現,現在所有的開源專案都相繼支援,但是又要相容於 1.10 版本之前 (含 1.10),所以變成要維護go.mod
及
vendor
兩種版本。我個人感覺 go module 解決 GOPATH 問題,不再依賴此環境變數,讓想入門 Go 語言的開發者,可以快速融入開發環境。
程式碼範例
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Ubuntu MATE 推出树莓派版本
- Ubuntu MATE 推出树莓派版本
- Crytek正式推出游戏引擎CryEngine 5.5版本
- 谷歌推出 ARCore 1.7 版本,增加 AR 滤镜
- Unity在最新版本中推出AR开发工具
- Unity推出Linux版本 支持Ubuntu与CentOS
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。