Golong学习之包管理的探索与实践
来源:互联网 发布:淘宝店铺首页1200 编辑:程序博客网 时间:2024/05/15 14:19
引言:刚学Go没多久,但是很快我就发现了Go的一个特别坑爹的地方 —— 包管理。当然不只是GFW的问题,更多的是有的时候,每个项目使用的包的版本并不是完全一致的,而Go无法做到这一点。虽然Go1.5之后加了vendor的特性,但是我仍然觉得不够。
不知道大家学过java、php没?例如maven、composer都是很好用的包管理工具。你可以针对每个项目建立一个包管理文件,并对每个依赖项进行版本控制。这是我需要的。并可以在项目的根目录生成lock文件,在安装依赖后,把安装时确切的版本号列表写入 lock 文件中。可以锁定该项目的特定版本。
从头说起
Go原始的包管理是通过go get命令,从远程仓库拉取并放到环境变量中的src文件夹中。开发的时候通过路径使用import关键字导入。就像这样:
//最简单的方式引入一个包的方式是直接引入包,例如:import "fmt"import "os"//也可以通过下面的方式将包一块引入,并写在括号内:import ("fmt""os")
实际上go get相当于两个命令,分别是:
git clonego install
例如获取第三方包go get github.com/llimllib/loglevel
,然后在项目中这么用:
import ( log "github.com/llimllib/loglevel")
是不是觉得特别坑爹?我也觉得。显然接下来我要给你们介绍一个我认为特别牛逼的可以颠覆这些复杂的操作的包管理工具。
那就是大名鼎鼎的glide
Glide 的安装
Linux 用户
curl https://glide.sh/get | sh
Mac 用户
brew install glide
Glide 的使用
进入项目根目录执行glide create
创建glide.yaml
通过glide get github.com/llimllib/loglevel
获取第三方包
执行完前两个步骤,你会发现项目根目录出现了glide.yaml文件,文件里面的内容如下:
package: demo01import:- package: github.com/llimllib/loglevel
这种情况下,默认不指定安装该第三方包的版本。默认拉取master的代码。
当你想更新该第三方包的代码时,cd到项目路径,执行glide up
即可
如果你想指定版本号,那么可以这么写:
package: demo01import:- package: github.com/llimllib/loglevel version: ^1.2.0
当然你可以对这个包指定一个仓库地址通过参数repo解决
package: demo01import:- package: github.com/llimllib/loglevel version: ^1.2.0 repo: git@github.com:llimllib/loglevel.git
记住,若是指定版本号和仓库地址的话,你需要执行glide install
更多有关glide的知识,可以参考
https://github.com/Masterminds/glide
https://glide.readthedocs.io/en/latest/glide.yaml/
完美~有什么不对的地方,请大家指正,毕竟是初学Golang。
完整的配置文件格式
package: github.com/Masterminds/glidehomepage: https://masterminds.github.io/glidelicense: MITowners:- name: Matt Butcheremail: technosophos@gmail.comhomepage: http://technosophos.com- name: Matt Farinaemail: matt@mattfarina.comhomepage: https://www.mattfarina.comignore:- appengineexcludeDirs:- node_modulesimport:- package: gopkg.in/yaml.v2- package: github.com/Masterminds/vcsversion: ^1.2.0repo: git@github.com:Masterminds/vcsvcs: git- package: github.com/codegangsta/cli- package: github.com/Masterminds/semverversion: ^1.0.0testImport:- package: github.com/arschles/assert
转自:
https://blog.sodroid.com/2017/05/20/2017-05-20-1/?hmsr=studygolang.com&utm_medium=studygolang.com&utm_source=studygolang.com
- Golong学习之包管理的探索与实践
- Golong学习之语言包管理进阶
- Golong学习之常见开发陷阱,你遇到过几个?
- [Golong]学习笔记(一) 基础知识
- [Golong]学习笔记(一) 基础知识
- linux学习之ubuntu的包管理
- 多线程编程的探索与实践(图)
- “软件工程”课程教学改革的探索与实践
- 软件测试实践 之 测试环境的规划与管理
- 软件测试实践 之测试环境的规划与管理
- 软件测试实践之测试环境的规划与管理
- 管理的理论与实践
- Python学习笔记 8--文件的管理、模块与包
- MYSQL集群探索与实践
- mysql集群探索与实践
- Pandas数据探索与实践
- Android 模块化探索与实践
- HTTPS优化探索与实践
- LINUX系统移植
- 安装 Kali Linux 后需要做的 20 件事
- source insight c/c++ 宏定义无法识别
- php面试(代码)
- 自带JSON解析工具
- Golong学习之包管理的探索与实践
- hadoop搭建过程中设置NTP时间服务器
- 矩阵分解(MF,SVD)和协同过滤(CF)
- eclipse导入JDK源码
- 搭建ELK日志分析系统(二)-elasticsearch-head插件安装
- 递归--二叉树遍历,求深度,求二叉树节点个数
- lspci | grep -i raid查询系统的raid卡信息
- ref与out之间的区别整理
- raspberry pi安装MySql无法登陆问题