go包管理工具-glide使用方法及踩坑记录

Posted shiyicode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go包管理工具-glide使用方法及踩坑记录相关的知识,希望对你有一定的参考价值。

前言

大学以来一直想做一个OJ,终于可以开始,而且是用新学的Go来写,心里还是挺兴奋的。
项目启动,要搭架子,第一件事,当然是选择一个包管理工具。Go的包管理还是挺混乱的,没有一个能像Java的Maven一样足够强大&一统天下,尽管优秀的第三方工具已有十来种,且官方也开始着手开发(快统一江湖吧)。
(ps:虽然包管理很让人糟心,但这并不能影响我对这门语言的热爱)

glide

安装

go get github.com/Masterminds/glide

使用

进入项目文件夹。!记住,项目必须放在src下,否则会出现很多问题,包括其他包管理工具!

cd $GOPATH/src/your_project

创建glide.yaml文件,并进行相应配置选项

glide init

修改glide.yaml,如果是刚创建的空项目,可以略过这一步。

默认,glide.yaml生成会加入所有import语句的包路径,那么也就包含我们项目内部的包路径,因此我们需要将它们删掉,并对这类import增加过滤规则。

安装glide.yaml配置的包

glide install

到这一步,我们的项目初始化就完成了,后续的操作就不再赘述了。

glide.yml文件

此处摘自Golang包管理工具Glide,你值得拥有

glide.ymlglide 包管理的配置文件。下面我们对glide.yml的相关元素进行说明。

这里是一个完整的glide.yml文件:

package: github.com/Masterminds/glide
homepage: https://masterminds.github.io/glide
license: MIT
owners:
- name: Matt Butcher
  email: technosophos@gmail.com
  homepage: http://technosophos.com
- name: Matt Farina
  email: matt@mattfarina.com
  homepage: https://www.mattfarina.com
ignore:
- appengine
excludeDirs:
- node_modules
import:
- package: gopkg.in/yaml.v2
- package: github.com/Masterminds/vcs
  version: ^1.2.0
  repo:    git@github.com:Masterminds/vcs
  vcs:     git
- package: github.com/codegangsta/cli
  version: f89effe81c1ece9c5b0fda359ebd9cf65f169a51
- package: github.com/Masterminds/semver
  version: ^1.0.0
testImport:
- package: github.com/arschles/assert

这些元素是:
+ package:顶部的 package 是它所在GOPATH的位置,glide 将从该位置下开始导包。
+ homepage:该项目的详情页面。
+ license:许可证标识,可以是SPDX license字符串或文件路径。
+ owners:项目的所有者信息,便于接受漏洞信息。
+ ignore:忽略导入的包,注意是包而不是目录。
+ excludeDirs:排除扫描依赖的目录。
+ import:import 的包列表: 
+ package:导入包的名称,必填。软件包名称遵循go工具所用的相同模式。这意味着:
1、映射到VCS远程位置的软件包名称以.git.bzr.hg.svn结尾。 例如,example.com/foo/pkg.git/subpkg。
2、GitHub, BitBucket, Launchpad, IBM Bluemix Services, and Go on Google Source是特殊情况,不需要 VCS 扩展。
+ version:可以为semantic version, semantic version range, branch, tag 或者 commit id。
+ repo:如果包名称不是repo位置或这是一个私人存储库,它可以去这里。 该软件包将从repo签出并放在软件包名称指定的位置。 这允许使用fork。
+ vcs:要使用的VCS,如githgbzrsvn。仅当无法从名称中检测到类型时才需要。例如,以.git或GitHub结尾的仓库可以被检测为Git。 对于Bitbucket的repo,我们可以联系API来发现类型。
+ subpackages:在存储库中使用的包的记录。这不包括存储库中的所有包,而是包括正在使用的包。
+ os:用于过滤的操作系统的列表。如果设置它将比较当前运行时操作系统与指定的操作系统,并且只有获取匹配的依赖。如果未设置过滤,则跳过。这些名称与构建标志和GOOS环境变量中使用的名称相同。
+ arch:用于过滤的体系结构列表。如果设置它将比较当前运行时架构与指定的架构,并且只有在匹配时获取依赖关系。如果未设置过滤,则跳过。名称与构建标志和GOARCH环境变量中使用的名称相同。
+ testImport:在导入中未列出的测试中使用的软件包列表。每个包具有与导入下列出的相同的详细信息。

注意

  1. 项目必须在GOPATH/src内部,强调一下src

我使用的时候是用gin框架当例子来测试,每次install都失败,原因都是一样,有的包出错,无法下载:

golang.org/x/sys/unix

后来在网上看到其他道友大多也都遇到过类似的问题。
其实是因为Google的原因,go get不能直接访问到golang.org/x这的模块。

解决方案如下
通过github其他路径下获取golang,org/x的镜像文件,并通过软链接的方式,加入到本地golang.org/x中。

git clone https://github.com/golang/net.git $GOPATH/src/github.com/golang/net

git clone https://github.com/golang/sys.git $GOPATH/src/github.com/golang/sys

git clone https://github.com/golang/tools.git $GOPATH/src/github.com/golang/tools

ln -s $GOPATH/src/github.com/golang $GOPATH/src/golang.org/x

以上是关于go包管理工具-glide使用方法及踩坑记录的主要内容,如果未能解决你的问题,请参考以下文章

Python打包工具Pyintealler打包py文件为windows exe文件过程及踩坑记录+实战例子

Golang学习--包管理工具glide

Fastlane 一键打包/发布APP - 使用记录及踩坑

Fastlane 一键打包/发布APP - 使用记录及踩坑

Jenkins pipeline的语法实例介绍及踩坑记录

食堂APP-项目开发及踩坑记录(10)