window下golang包管理glide使用說明

golang是一門簡潔高效的開發 語言,可是包管理一直是一個痛點,如圖 :
java

  1. 不少開源項目特別是github.com中的大量應用golang.org和google.golang.org中的源碼,且因爲被牆的緣由也會致使各類不順利,複製GOPATH裏內容在團隊人比較多的時候較複雜
  2. 包以前關係複雜,沒法確切的知道本身包裏引用哪些項目源,甚至可能有 一些被誤刪致使的問題
  3. 沒法準確管理引用包源的版本,可能會致使一些項目編譯不經過

不像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

  1. glide安裝
go get github.com/Masterminds/glide

安裝完成後在%GOPATH%/bin目錄下會有一個glide.exe文件
github

  1. 配置glide的環境變量,方便後面使用glide指令
  2. 切換到項目根目錄下用glide init 指令初始化yaml文件
glide init


初始化後完整目錄以下

glide.yaml的內容,由於main.go裏暫時只有fmt.Println("hello world")golang

package: github.com/nickchou/glide-go
import: []
  1. 導一個包測試
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

  1. 從新導入包,若是main函數裏用到了此包,且包裏含有其餘項目源,也會一併下載 注意被牆,特別是項目源在golang.org上的
glide get github.com/mattn/go-adodb

導入單個包源maven

glide get --all-dependencies -s -v github.com/mattn/go-adodb

導入單個包源的目錄結構以下
ide

  1. 根據指定版本號導入項目,如
glide get github.com/go-sql-driver/mysql#v1.2

glide.yaml文件內容以下
函數

  1. 安裝完畢,實際使用import的時候會優先在vendor目錄下找代碼源
相關文章
相關標籤/搜索