window下golang包管理glide使用说明

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

  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文件

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

    glide init


    初始化后完整目录如下

    glide.yaml的内容,因为main.go里暂时只有fmt.Println("hello world")

    package: github.com/nickchou/glide-go
    import: []
  4. 导一个包测试
    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行处

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

  5. 重新导入包,如果main函数里用到了此包,且包里含有其他项目源,也会一并下载 注意被墙,特别是项目源在golang.org上的

    glide get github.com/mattn/go-adodb

    导入单个包源

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

    导入单个包源的目录结构如下

  6. 根据指定版本号导入项目,如

    glide get github.com/go-sql-driver/mysql#v1.2

    glide.yaml文件内容如下

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

原文地址:https://www.cnblogs.com/nickchou/p/8955180.html

时间: 2024-10-08 21:09:47

window下golang包管理glide使用说明的相关文章

golang包管理的古往今来

https://golang.org/ before GO1.5-GOPATH 在GO1.5之前用GOPATH以及GOROOT这两个环境变量来决定包的位置. GOROOT就是告知当前go的安装位置,编译的时候从GOROOT去找sdk的system library. GOPATH的目的是为了告知go,需要代码的时候,去哪里查找.注意这里的代码,包括本项目和引用外部项目的代码.GOPATH可以随着项目的不同而重新设置. 从go 1.8开始,如果GOPATH没有被设置,会有一个默认值,在Unix上为$

Linux下程序包管理之YUM

实验环境: CentOS release 6.6 (Final)  一台 IP地址:172.16.249.230 附带:CentOS release 6.6光盘镜像文件 CentOS-6.6-x86_64-bin-DVD1.iso CentOS-6.6-x86_64-bin-DVD2.iso YUM(Yellow dog Updater, Modified) 由Duke University团队,修改Yellow Dog Linux的Yellow Dog Updater开发而成, 是一个基于 R

linux下程序包管理

我是一个老实人从来不说实话,我是一个好人从来不说真话,学习linux有段时间了,太高深的东西还不懂,就写一下最近学习的程序包管理吧. 大家都知道在我们学习linux主要是搞运维的,那么我们每天上班的时候就避免不了跟程序包打交道,你不信啊?反正我上班的时候领导总是在我不经意的抬头瞬间给我抛一个媚眼,我立马就领悟了领导的意思,有活要干了,最好不是服务器挂了老天保佑. 有时候我们需要在系统上安装某个软件或者服务(就是程序包),可能需要现在本地磁盘上查一下有没有这些程序包,有的话我们可以直接使用rpm

windows下的包管理软件

在开源的世界里,linux,nodejs,ruby这些都有好的包管理工具,让大家使用起来更简单,windows下其实也有. Chocolatey,主页在Chocolatey 安装如下: @powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" &a

Linux下程序包管理工具RPM

实验环境: CentOS release 6.6 (Final)  一台 IP地址:172.16.249.230 RPM 是 Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:在CentOS .Redhat.Fedora .SuSE.YellowDog等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用: 一.RPM程序包管理的用途: 1.可以安装.删除.升级和管理软件:当然也支持在线安装和升级软件:

Golang包管理工具之govendor的使用

1. govendor简介 golang工程的依赖包经常使用go get命令来获取,例如:go get github.com/kardianos/govendor ,会将依赖包下载到GOPATH的路径下. 常用的依赖包管理工具有godep,govendor等,在Golang1.5之后,Go提供了 GO15VENDOREXPERIMENT 环境变量(Go 1.6版本默认开启该环境变量),用于将go build时的应用路径搜索调整成为 当前项目目录/vendor 目录方式.通过这种形式,我们可以实现

Linux下RPM包管理

概述 一种用于互联网下载包的打包及安装工具,它包含在某些linux分发版中.它生成具有.RPM扩展名的文件.RPM是Redhat Package Manager(Redhat软件包管理工具)的缩写.这一文件格式虽然打上了Redhat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux.S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用.可以算是公认的行业标准了. RPM包的名称格式 apache-1.3.23-11.i386.rpm - “apache”:软件名

MAC 下的包管理工具

1. Mac Port的下载地址 http://www.macports.org/install.php 2. Mac Port的说明文档 http://guide.macports.org/ 3. Mac Port中第三方软件下载包存放的默认路径是:/opt/local/var/macports/distfiles/为了提高安装速度,可以在安装新port时直接将此目录下的文件拷贝到新的Mac Port相同的目录中就可以避免Port去网上下载. 4. 使用Mac Port前应该首先更新Port的

告别GOPATH,快速使用 go mod(Golang包管理工具)

https://studygolang.com/articles/17508?fr=sidebar 文中的wserver为module名,route为本地的包名,go.mod所在的目录名不一定非要和module名一致,把wserver文件夹重命名为其他的名称也可以,只要go mod init wserver,就import "wserver/本地包名" 原文地址:https://www.cnblogs.com/answercard/p/10605542.html