golang依赖管理
使用GOPATH管理依赖
go 1.6 前,GOPATH作为第三方的依赖目录。
GOPATH 默认位置~/go(linux, unix, Mac)
临时GOPATH
export GOPATH=/path/to/dir
export GO111MODULE=off
第三方库存放位置,GOPATH目录下的src目录下,/path/to/dir/src
依赖查找路径
- GOROOT
- GOPATH
使用GOVENDER管理依赖
go 1.6 版本发布,vender目录被添加到除GOPATH和GOROOT之外的依赖目录。
依赖查找路径
- 当前目录中
vender目录下 - 向上级查找,直到找到src下的
vender目录 - GOROOT
- GOPATH
使用GO111MODULE管理依赖
go 1.8 加入 gomod 作为依赖管理。
特点: 依赖由go命令统一管理,开发者不用关心目录结构。
Usage
常用命令列表
go mod init初始化模块,例如go mod init github.com/wjp2013/hellogo build, go test和其它构建命令会自动为 go.mod 添加新的依赖go get改依赖关系的所需版本(或添加新的依赖关系)go list -m all列出当前模块及其所有依赖项go mod tidy拉取缺少的模块,移除不用的模块
不常用命令
go mod download下载依赖包到本地 cachego mod edit编辑 go.mod 文件,选项有 -json、-require 和 -exclude,可以使用帮助 go help mod editgo mod graph打印模块依赖图go mod vendor将依赖复制到 vendor 目录go mod verify验证依赖是否正确go mod why解释为什么需要依赖
使用示例
开启GO111MODULE
Go Modules 是否启用目前由环境变量 GO111MODULE 控制。
临时修改
export GO111MODULE=off
修改全局变量
go env -w GO111MODULE=on
使用过程
创建go mod
go mod init test.com会在当前目录下创建一个 go.mod 文件,模块名为test.com。生成依赖
- 方法1: 有了模块定义,然后执行
go mod tidy会自动生成依赖,填充 go.mod, go.sum 文件。 - 方法2: 修改源码用 import 引入模块 然后执行
go build, go test等命令,会更新 go.mod, go.sum 文件。
- 方法1: 有了模块定义,然后执行
更新依赖
go list -m all查看当前项目正在使用的 package 版本,然后执行go get xxx/xxx来更新指定的 package, 再执行go test会自动更新 go.mod 文件。
升级依赖项
>$ go list -m -versions github.com/gin-gonic/gin
// 将会列出 Gin 版本历史
github.com/gin-gonic/gin v1.1.1 v1.1.2 v1.1.3 v1.1.4 v1.3.0
将版本更新到上个版本,这里只是个演示。
>$ go get github.com/gin-gonic/gin@v1.1.4 // 只需要在依赖后面加上 @version 就可以了
>$ go list -m all
// 看到了版本变化
github.com/gin-gonic/gin v1.1.4
或者可以使用 go mod 来进行版本的切换,这样就需要两个步骤了:
>$ go mod edit -require="github.com/gin-gonic/gin@v1.1.4" // 修改 go.mod 文件
>$ go mod tidy //下载更新依赖
Go 国内加速镜像
国内网络访问国外资源经常会出现不稳定的情况。因此设置 CDN 加速代理就很有必要了,以下是几个速度不错的提供者:
- 官方: < 全球 CDN 加速 https://goproxy.io/>
- 七牛:Goproxy 中国 https://goproxy.cn
- 其他:jfrog 维护 https://gocenter.io
- 阿里: https://mirrors.aliyun.com/goproxy/
使用方法
# 启用 Go Modules 功能
go env -w GO111MODULE=on
# 配置 GOPROXY 环境变量
go env -w GOPROXY=xxxx
Refer: Go module
golang依赖管理的更多相关文章
- Golang依赖管理工具:glide从入门到精通使用
这是一个创建于 2017-07-22 05:33:09 的文章,其中的信息可能已经有所发展或是发生改变. 介绍 不论是开发Java还是你正在学习的Golang,都会遇到依赖管理问题.Java有牛逼轰轰 ...
- Golang Gin 项目包依赖管理 godep 使用
Golang Gin 项目包依赖管理 godep 使用 标签(空格分隔): Go 在按照github.com/tools/godep文档go get完包以后,调整项目结构为$GOPATH/src/$P ...
- golang 包依赖管理 godep 使用
介绍: godep是解决包依赖的管理工具,目前最主流的一种,原理是扫描记录版本控制的信息,并在go命令前加壳来做到依赖管理. 1.安装: go get github.com/tools/godep 2 ...
- golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的
golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的 1:执行脚本setGoPath.sh#!/bin/bashif [[ $GOPATH =~ .*$ ...
- Go 包依赖管理工具 —— govendor
govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具.与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本.以及 ...
- Golang包管理工具之govendor的使用
1. govendor简介 golang工程的依赖包经常使用go get命令来获取,例如:go get github.com/kardianos/govendor ,会将依赖包下载到GOPATH的路径 ...
- Golang包管理工具glide简介
Golang包管理工具glide简介 前言 Golang是一个十分有趣,简洁而有力的开发语言,用来开发并发/并行程序是一件很愉快的事情.在这里我感受到了其中一些好处: 没有少了许多代码格式风格的争论, ...
- Go依赖管理及Go module使用
Go语言的依赖管理随着版本的更迭正逐渐完善起来. 依赖管理 为什么需要依赖管理 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面.这就导致了同一个库只能保存一个版本的代码.如果不同 ...
- Go依赖管理工具 - dep
https://segmentfault.com/a/1190000013561841 Go依赖管理工具 Go dependency management tool 环境要求 Golang >= ...
随机推荐
- TensorFlow 实战卷积神经网络之 LeNet
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! LeNet 项目简介 1994 年深度学习三巨头之一的 Yan L ...
- 一份从入门到精通NLP的完整指南 | NLPer
该小博主介绍 本人:笔名zenRRan,方向自然语言处理,方法主要是深度学习. 未来的目标:人工智能之自然语言处理博士. 写公众号目的:将知识变成开源,让每个渴求知识而难以入门人工智能的小白以及想进阶 ...
- SpringCloud服务的注册发现--------zookeeper实现服务与发现 + Ribbon实现客户端负载均衡
1,Eureka 闭源了,但是我们可以通过zookeeper实现注册中心的功能. zookeeper 是一个分布式协调工具,可以实现服务的注册和发现,配置中心,注册中心,消息中间件的功能 2,工具准备 ...
- Java程序员必读的9本书
本文列出的9本书在Java程序员界都是被认为很棒的书.当一个程序员开始初学Java时,他的第一个问题应该是如何选择一本书来作为指导学习Java.这个问题也就表明,相对于其他的教程和博客,Java书籍还 ...
- 深入理解NIO(三)—— NIO原理及部分源码的解析
深入理解NIO(三)—— NIO原理及部分源码的解析 欢迎回到淦™的源码看爆系列 在看完前面两个系列之后,相信大家对NIO也有了一定的理解,接下来我们就来深入源码去解读它,我这里的是OpenJDK-8 ...
- [讲解]prim算法<最小生成树>
最小生成树的方法一般比较常用的就是kruskal和prim算法 一个是按边从小到大加,一个是按点从小到大加,两个方法都是比较常用的,都不是很难... kruskal算法在本文里我就不讲了,本文的重点是 ...
- Spring如何解决循环依赖,你真的懂了?
导读 前几天发表的文章SpringBoot多数据源动态切换和SpringBoot整合多数据源的巨坑中,提到了一个坑就是动态数据源添加@Primary接口就会造成循环依赖异常,如下图: 这个就是典型的构 ...
- NKOJ 1353 图形面积
时间限制 : 10000 MS 空间限制 : 65536 KB 问题描述 桌面上放了N个矩形,这N个矩形可能有互相覆盖的部分,求它们组成的图形的面积.(矩形的边都与坐标轴平行) 输入格式 输入第一 ...
- JSP+Struts2+JDBC+Mysql实现的校园宿舍管理系统
项目简介 项目来源于:https://gitee.com/passenger134/javaweb-sushe 本系统基于JSP+Struts2+JDBC+Mysql的校园宿舍管理系统.该系统没有使用 ...
- Shell:Day02.笔记
重定向和管道符:1.重定向 程序 = 指令 + 数据 命令 变量 在程序中,数据如何输入?有如何输出? 数据输入:键盘 -- 标准输入,但是并不是唯一输入方式: --std ...