golang是一門簡潔高效的開發 語言,可是包管理一直是一個痛點,如圖 :
java
不像java裏有maven或者jar、donet裏有dll文件等等,讓使用方方便不少 。mysql
go在1.5版本引入了vendor屬性(默認關閉,須要設置go環境變量GO15VENDOREXPERIMENT=1),並在1.6版本中默認開啓了vendor屬性。
vendor就是go編譯時,優先從項目源碼樹根目錄下的vendor目錄查找代碼(能夠理解爲切了一次GOPATH),若是vendor中有,則再也不去GOPATH中去查找。
固然golang的包管理也有好幾種方案(godep/govendor/gvt等等),模式基本上也都差很少,相比而言glide更方便,因此着重介紹glide的使用git
go get github.com/Masterminds/glide
安裝完成後在%GOPATH%/bin目錄下會有一個glide.exe文件
github
glide init
初始化後完整目錄以下
glide.yaml的內容,由於main.go裏暫時只有fmt.Println("hello world")golang
package: github.com/nickchou/glide-go import: []
glide get github.com/mattn/go-adodb
若是報如下錯(如圖):
Unable to export dependencies to vendor directory: Error moving files: exit status 1. output:
解決辦法: 找到%GOPATH%/src/github.com/Masterminds/glide/path/winbug.go 文件,修改約75行處sql
func CustomRename(o, n string) error { // Handking windows cases first if runtime.GOOS == "windows" { msg.Debug("Detected Windows. Moving files using windows command") //cmd := exec.Command("cmd.exe", "/c", "move", o, n) cmd := exec.Command("cmd.exe", "/c", "xcopy /s/y", o, n+"\\") //新增這一行代碼 output, err := cmd.CombinedOutput() if err != nil { return fmt.Errorf("Error moving files: %s. output: %s", err, output) } return nil } else if detectWsl() { cmd := exec.Command("mv", o, n) output, err2 := cmd.CombinedOutput() msg.Debug("Detected Windows Subsystem for Linux. Removing files using subsystem command") if err2 != nil { return fmt.Errorf("Error moving files: %s. output: %s", err2, output) } return nil } return os.Rename(o, n) }
從新編譯後複製glide.exe文件到%GOPATH%/bin目錄下【重要】windows
glide get github.com/mattn/go-adodb
導入單個包源maven
glide get --all-dependencies -s -v github.com/mattn/go-adodb
導入單個包源的目錄結構以下
ide
glide get github.com/go-sql-driver/mysql#v1.2
glide.yaml文件內容以下
函數