window下golang包管理glide使用说明

golang是一门简洁高效的开发 语言,但是包管理一直是一个痛点,如图 :
308699-20180426223042516-1893152512.png

  1. 很多开源项目特别是github.com中的大量应用golang.org和google.golang.org中的源码,且由于被墙的原因也会导致各种不顺利,复制GOPATH里内容在团队人比较多的时候较复杂
  2. 包之前关系复杂,无法确切的知道自己包里引用哪些项目源,甚至可能有 一些被误删导致的问题
  3. 无法准确管理引用包源的版本,可能会导致一些项目编译不通过

不像java里有maven或者jar、donet里有dll文件等等,让使用方方便很多 。

go在1.5版本引入了vendor属性(默认关闭,需要设置go环境变量GO15VENDOREXPERIMENT=1),并在1.6版本中默认开启了vendor属性。
vendor就是go编译时,优先从项目源码树根目录下的vendor目录查找代码(可以理解为切了一次GOPATH),如果vendor中有,则不再去GOPATH中去查找。
当然golang的包管理也有好几种方案(godep/govendor/gvt等等),模式基本上也都差不多,相比而言glide更方便,所以着重介绍glide的使用

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

安装完成后在%GOPATH%/bin目录下会有一个glide.exe文件
308699-20180426214216772-869472484.png

  1. 配置glide的环境变量,方便后面使用glide指令
    308699-20180426214354552-2120337983.png
  2. 切换到项目根目录下用glide init 指令初始化yaml文件
glide init

308699-20180426213933781-1487871812.png
初始化后完整目录如下
308699-20180426214805430-1557889403.png
glide.yaml的内容,因为main.go里暂时只有fmt.Println("hello world")

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:
308699-20180426215324702-424526392.png
解决办法: 找到%GOPATH%/src/github.com/Masterminds/glide/path/winbug.go 文件,修改约75行处

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目录下【重要】

  1. 重新导入包,如果main函数里用到了此包,且包里含有其他项目源,也会一并下载 注意被墙,特别是项目源在golang.org上的
glide get github.com/mattn/go-adodb

导入单个包源

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

导入单个包源的目录结构如下
308699-20180426221155644-436031979.png

  1. 根据指定版本号导入项目,如
glide get github.com/go-sql-driver/mysql#v1.2

glide.yaml文件内容如下
308699-20180426222329244-2041330588.png

  1. 安装完毕,实际使用import的时候会优先在vendor目录下找代码源

转载于:https://www.cnblogs.com/nickchou/p/8955180.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值