glide是golang的一款包管理工具,就像Java下的Maven(当然Maven的定位不只是包管理工具)。今天试用了一下,记录一下使用过程和遇到的一些坑。

环境

Windows 7,Goland,Go 1.8.4

安装

go get -u github.com/Masterminds/glide

在Goland中打开File——Settings——Tools——External Tools,根据自己的gopath添加gopath\bin\glide.exe,如图

在Goland中输入命令:

glide

如果出现提示就证明安装成功了。

使用

不多说,直接上命令:

glide init

然后就会生成对应的glide.yaml,生成过程中根据自己需要选择合适的配置就行。

我的glide.yaml如下:

package: github.com/AceDarkkinght/GoProxyCollector
import:
- package: github.com/PuerkitoBio/goquery
version: ~1.3.0
- package: github.com/boltdb/bolt
version: ~1.3.1
- package: github.com/cihub/seelog
version: ~2.6.0
- package: github.com/parnurzeal/gorequest
version: ~0.2.15

现在就可以通过命令下载对应的dependencies了

glide install

然后就毫无意外的出错了。。。。

[WARN]  Unable to set version on golang.org/x/net/html to . Err: Cannot detect VCS
[ERROR] Error scanning golang.org\x\net\html: open C:\Users\yourUserName\.glide\cache\src\https-golang.org-x-net-html: The system cannot find the file specif
ied.
[ERROR] Failed to retrieve a list of dependencies: Error resolving imports

这是由于墙的原因导致有些google的包下不下来,我们可以使用mirror命令指定镜像,从镜像地址下载。命令如下:

glide mirror set https://golang.org/x/net/html https://github.com/golang/net --vcs git
glide mirror set https://golang.org/x/net/publicsuffix https://github.com/golang/net --vcs git
glide mirror set https://golang.org/x/sys/unix https://github.com/golang/sys --vcs git

再次运行:

glide install

再出错:

[ERROR] Unable to export dependencies to vendor directory: Error moving files: exit status 1. output: Access is denied.
0 dir(s) moved.

查了资料发现这是Windows下和文件权限有关的一个bug,github上面有相关讨论:

https://github.com/Masterminds/glide/issues/873

网友给出了两个解决方案:

  1. 修改glide源代码。
  2. 修改系统UAC。

这里采用第一种方法:

// 找到github.com/Masterminds/glide/path/winbug.go
// 修改 func CustomRename(o, n string) error
// 把 cmd := exec.Command("cmd.exe", "/c", "move", o, n) 改为
cmd := exec.Command("robocopy.exe", o, n, "/e")

保存修改,重新编译。

go get -u github.com/Masterminds/glide

然后运行:

glide install

如无意外的话你就可以在项目路径看到vendor文件夹了。

如果你有更好的办法或者遇到了别的问题也欢迎一起讨论。

Reference

https://studygolang.com/articles/7129

https://github.com/Masterminds/glide/issues/873

https://my.oschina.net/quicker/blog/831352?hmsr=studygolang.com&utm_medium=studygolang.com&utm_source=studygolang.com

使用glide进行包管理的更多相关文章

  1. 在go modules里使用go get进行包管理

    上一篇文章里我们介绍了go modules的初步使用,现在我们来更深入的了解一下如何使用go get在module中管理依赖. module下的包管理 首先我们介绍过go mod edit修改go.m ...

  2. Go语言使用Godep进行包管理

    一.为什么要包管理 默认Go的第三方包都是放在Gopath的src目录下,而且这些包都没有版本号的概念,这样的可能会出现一些问题. 举个例子:当A同事将开发完程序之后,此时可能引用了一个第三方的包,过 ...

  3. nodejs docker 开发最好选择yarn 进行包管理而不是npm

    npm 与yarn 的区别网上一大堆的文章,我们在构建docker 镜像是应该遵守的有些原则   基础镜像尽量小 对于构建进行缓存处理 构建的docker 的文件层数尽量少 能直接运行的,就别进行重复 ...

  4. Glide Golang包管理

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

  5. 1.node 在node中 进行包与包之间函数的调用 module.exports

    本文参考学习了廖雪峰的大作 模块 但是廖的文章只模块只有一个函数,在此演示一个模块中有两个函数,在另外一个函数中是如何去调用的 //hello.js包中的内容'use strict'; var s=' ...

  6. [golang] Glide 包管理

    一.概述 golang的包管理工具有很多,本篇幅主要介绍glide进行包管理. 二.安装及命令介绍 go get github.com/Masterminds/glide glide create|i ...

  7. 插件~NuGet与packages管理项目的包包

    NuGet NuGet是一个工具,已经被集成到VS开发环境里,直接使用它可以快速安装第三方的包包,包包就是一组DLL和资源,开发者把它们打包一个包包,或者叫做package,而我们使用nuget可以将 ...

  8. linux下包管理命令yum与apt-get以及开发环境配置

    一般来说市面上常见的Linux系统分为两大类: RH类:Redhat.centOS和Fedora等 Debian类:ubuntu.Debian等. 上述两类系统对应的包管理工具命令分别是yum和apt ...

  9. npm 模块化管理

    我们要使用 npm 进行包管理,首先我们得安装 npm,怎么安装?其实只要你安装了 node,那便相当于安装了 npm: node下载地址:http://nodejs.cn/download/ 由于 ...

随机推荐

  1. js在工作中遇到的一些问题

    前言 js这种语言没有太多封装好的模式或者统一的编程方式,所以一些细节的问题很容易导致bug,那下面就写为:一份坚固的代码是什么样的. 持续更新一下,记一些good case和bug. 事件绑定的选择 ...

  2. SpringBoot Hello World

    本文首发于我的github博客 前言 SpringBoot是Spring MVC升级版,基于『约定优于配置』的原则,快速开发出web程序. 环境 本系列笔记环境如下: Sun JDK1.8.0_20 ...

  3. UVA1600 状态BFS

    刚开是我用了一种很笨的bfs过掉的,后来看到原来还可以三维带状态BFS,觉得是一个不错的思路. d[x][y][k]表示坐标位于(x,y)经过K个障碍到达时的最短路径,当然如果(x,y)处的数字是0就 ...

  4. chmod 与大写 X

    chmod(1) 手册页中对权限位的描述中提及到 rwxXst 六个权限标记, rwx 是几乎所有 Linux 初学者都会学到的,更进者会了解到 st 两个标记,但 X 却少有提起.所以笔者大致了解了 ...

  5. java 集合框架(四)Set

    一.概述 Set是一种没有重复元素的集合,它所有的方法都是直接继承自Collection接口,并且添加了一个对重复元素的限制.Set要求强化了equals和hashCode两个方法,以使Set集合可以 ...

  6. vue项目中对axios的二次封装

    近来在使用vue重构公司m站时,使用了axios来进行数据的请求,由于项目的需要,对axios进行了二次封装,点击进入axios //引入axios import axios from 'axios' ...

  7. 【其他】Objective-C 内存管理学习总结

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/OC_CG.html 最近学习了Objective-C语言(以下简称OC),其他的都还好,唯有它的内存管理让我不知所 ...

  8. Jenkins Android 自动打包配置

    一.Jenkins自动打包配置 目标:1. 自动打包:2. 自动上传:3. 友好下载 1. Jenkins简介 Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作. 减少重复劳 ...

  9. java Socket实现简单在线聊天(三)

    在上一篇,利用线程使服务端实现了能够接收多客户端请求的功能,这里便需要客户端接收多客户端消息的同时还能把消息转发到每个连接的客户端,并且客户端要能在内容显示区域显示出来,从而实现简单的在线群聊. 在实 ...

  10. R语言︱文本挖掘——jiabaR包与分词向量化的simhash算法(与word2vec简单比较)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- <数据挖掘之道>摘录话语:虽然我比 ...