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: []
  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行处

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文件内容如下



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

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

  1. Golang包管理工具glide简介

    Golang包管理工具glide简介 前言 Golang是一个十分有趣,简洁而有力的开发语言,用来开发并发/并行程序是一件很愉快的事情.在这里我感受到了其中一些好处: 没有少了许多代码格式风格的争论, ...

  2. Golang 包管理机制

    Golang 包管理机制 1. 历史 在go1.11之前, 并没有官方的包管理机制(Godep算个半官方), 主流的包管理机制有: GoVendor Glide Godep 在go1.11之后, 官方 ...

  3. Golang 包管理简介

    Golang 包管理 在一个项目里,如果想引用本地包,经常会把新手搞的莫名其妙.这里通俗记录一下. 首先先要知道几个默认的规则 必须定义环境变量GOPATH,GOPATH可以定义多个目录 所有项目代码 ...

  4. golang包管理工具

    软件开发中,不可避免的会使用到第三方库,因此包管理工具可以极大的方便开发者管理第三方依赖,避免掉入"依赖地狱". 作为google强大背书的golang语言,golang官方包管理 ...

  5. Glide Golang包管理

    Golang的包管理乱得不行,各种工具横空出世,各显神通啊.用了几个下来,发现 Glide 是比较好用的,使用了 vender 来进行管理,多个开发环境的版本不冲突,功能强大,配置文件也足够简单. 初 ...

  6. golang包管理的取巧

    常见的golang的包管理工具 glide 使用yaml做配置,语义化版本管理,可以设置镜像,下载x系列库,但是x系列库被第三方库依赖时会出现下载失败. dep 亲儿子,语义化版本管理,无法解决墙 v ...

  7. golang包管理工具及环境管理工具;如何下载外网的依赖包

    简介: golang的包管理工具类似于java的maven.python的pip.js的npm,可以实现依赖包的统一管理:有很多:govendor.godep.glide,挑一个自己喜欢的用吧.mac ...

  8. window下golang使用gRPC入门案例&net core客户端

    gRPC是google开源高性能分布式RPC框架,支持http/2 双向数据流传输及Protobuff,可以在任何环境下运行. 它可以有效地将数据中心内和跨数据中心的服务与可插拔支持进行负载均衡,跟踪 ...

  9. golang包管理的古往今来

    https://golang.org/ before GO1.5-GOPATH 在GO1.5之前用GOPATH以及GOROOT这两个环境变量来决定包的位置. GOROOT就是告知当前go的安装位置,编 ...

随机推荐

  1. POJ 3177 Redundant Paths & POJ 3352 Road Construction(双连通分量)

    Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...

  2. AMF3 在Unity中使用AMF3和Java服务器通信

    现在在做的项目是一个网页游戏的移植到移动端. 所以服务器直接使用原来的代码.原来的游戏是as3实现,使用flash amf3数据通信. Unity 使用C#作为脚本语言,所以就需要.net的amf3解 ...

  3. 第十四次ScrumMeeting会议

    第十三次Scrum Meeting 时间:2017/12/2 地点:咖啡馆 人员:策划组美工组 目前工作情况 名字 完成的工作 计划工作 蔡帜 科技树策划设计,科技图鉴蓝图设计 员工方面细节设定 游心 ...

  4. 一个android控件资源网站

    http://www.androidviews.net/ 里面有各种常用控件,赞~

  5. 健康领域今年开始井喷了,养老地产和私人医生这两个领域目测成为下一轮BAT在健康领域布局的竞争方向

    医疗行业做了六年多的时间,今年到了井喷的阶段,腾讯先是入股了丁香园,然后又一亿美金融资挂号网,春雨医生获得5000万美元的C轮融资,这是要上市的节奏.. 从互联网战略上,健康网和医疗网都是做资料刚开始 ...

  6. Eclipse下JRebel6.5.0热部署插件安装、破解及配置

    发现一个问题:如果安装了jRebel,但是并未对项目添加jRebel监听时,如果重写jar包中的类, 虽然重写后的类会得到编译(classes中的class已经是修改后的class),但是并不会调用重 ...

  7. elasticsearch 工具类

    <?php /** * Created by PhpStorm. * User: brady * Date: 2018/4/8 * Time: 10:31 * esticsearch helpe ...

  8. 高级C代码的汇编分析

    在windows上,常用的函数调用方式有: Pascal方式,WINAPI(_stdcall)方式 和C方式(_cdecl) _cdecl调用规则: 1,参数从右到左入堆栈 2,在函数返回后,调用者要 ...

  9. LevelDB速记

    LevelDb的基本结构如下: 由六大部分组成: 一.MemTable,用户写入和读取的直接对象, 二.Immutable MemTable,用户状态写入的对象写满的MemTable之后会转为Immu ...

  10. js获取上传文件内容

    js 获取上传文件的字节数及内容 <div> 上传文件 : <input type="file" name = "file" id = &qu ...