使用glide进行包管理
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
网友给出了两个解决方案:
- 修改glide源代码。
- 修改系统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进行包管理的更多相关文章
- 在go modules里使用go get进行包管理
上一篇文章里我们介绍了go modules的初步使用,现在我们来更深入的了解一下如何使用go get在module中管理依赖. module下的包管理 首先我们介绍过go mod edit修改go.m ...
- Go语言使用Godep进行包管理
一.为什么要包管理 默认Go的第三方包都是放在Gopath的src目录下,而且这些包都没有版本号的概念,这样的可能会出现一些问题. 举个例子:当A同事将开发完程序之后,此时可能引用了一个第三方的包,过 ...
- nodejs docker 开发最好选择yarn 进行包管理而不是npm
npm 与yarn 的区别网上一大堆的文章,我们在构建docker 镜像是应该遵守的有些原则 基础镜像尽量小 对于构建进行缓存处理 构建的docker 的文件层数尽量少 能直接运行的,就别进行重复 ...
- Glide Golang包管理
Golang的包管理乱得不行,各种工具横空出世,各显神通啊.用了几个下来,发现 Glide 是比较好用的,使用了 vender 来进行管理,多个开发环境的版本不冲突,功能强大,配置文件也足够简单. 初 ...
- 1.node 在node中 进行包与包之间函数的调用 module.exports
本文参考学习了廖雪峰的大作 模块 但是廖的文章只模块只有一个函数,在此演示一个模块中有两个函数,在另外一个函数中是如何去调用的 //hello.js包中的内容'use strict'; var s=' ...
- [golang] Glide 包管理
一.概述 golang的包管理工具有很多,本篇幅主要介绍glide进行包管理. 二.安装及命令介绍 go get github.com/Masterminds/glide glide create|i ...
- 插件~NuGet与packages管理项目的包包
NuGet NuGet是一个工具,已经被集成到VS开发环境里,直接使用它可以快速安装第三方的包包,包包就是一组DLL和资源,开发者把它们打包一个包包,或者叫做package,而我们使用nuget可以将 ...
- linux下包管理命令yum与apt-get以及开发环境配置
一般来说市面上常见的Linux系统分为两大类: RH类:Redhat.centOS和Fedora等 Debian类:ubuntu.Debian等. 上述两类系统对应的包管理工具命令分别是yum和apt ...
- npm 模块化管理
我们要使用 npm 进行包管理,首先我们得安装 npm,怎么安装?其实只要你安装了 node,那便相当于安装了 npm: node下载地址:http://nodejs.cn/download/ 由于 ...
随机推荐
- 通过实例介绍Android App自动化测试框架--Unittest
1.为什么需要使用框架实现自动化测试 作为测试工程师,可能在代码能力上相比开发工程师要弱一点,所以我们在写脚本的时候就会相对容易的碰到更多的问题,如果有一个成熟的框架供给我们使用的话,可以帮助我们避免 ...
- aria2 加速百度网盘下载
准备工作: chrome浏览器: BaiduExporter插件(下载地址:https://github.com/acgotaku/BaiduExporter): aria2工具(下载地址:http: ...
- sonar + jacoco + mockMvc 模拟session 用户登录 配合SpringSecurity 权限 快速测试代码覆盖率.
遇到mock 测试简直就是神器,特别是要做代码覆盖率,直接测试controller就好了,缺点,虽然可以回滚事务,但是依赖数据库数据,解决,根据SpringBoot ,再建立一个专门跑单元测试的数据库 ...
- Disruptor3.0的实现细节
本文旨在介绍Disruptor3.0的实现细节,首先从整体上描述了Disruptor3.0的核心类图,Disruptor3.0 DSL(领域专用语言)的实现类图,并以Disruptor官方列举的几大特 ...
- 用DirectDraw封装的位图动画类
头文件 [cpp] view plaincopyprint? #pragma once #include <vector> using namespace std; #include &l ...
- ClientToScreen 和ScreenToClient 用法
ClientToScreen( )是把窗口坐标转换为屏幕坐标 ScreenToClient( )是把屏幕坐标转换为窗口坐标 屏幕坐标是相对于屏幕左上角的,而窗口坐标是相对于窗口用户区左上角的 VC下, ...
- grub2与grub区别
关于版本: GRUB2 使之版本号为1.98之后的grub:GRUB legacy(版本为0.97)是指GRUB,而非GRUB2,grub是指 grub1.97 和以前的,grub 2 指的是 gru ...
- linux命令之 ifconfig
许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).通常需 ...
- php 连接mssql
以前用的都是mysql,今天突然想用下mssql,起先用的是sql server200. 第一种方法 打开mssql.dll拓展.然后把mssql.secure_connection = off改为o ...
- 详解Linux Initrd
在Linux操作系统中,有一项特殊的功能--初始化内存盘INITRD(INITial Ram Disk)技术,而且内核支持压缩的文件系统映像.有了这两项功能,我们可以让Linux系统从小的初始化内存盘 ...