使用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

依赖查找路径

  1. GOROOT
  2. GOPATH

使用GOVENDER管理依赖

go 1.6 版本发布,vender目录被添加到除GOPATHGOROOT之外的依赖目录。

依赖查找路径

  1. 当前目录中vender目录下
  2. 向上级查找,直到找到src下的vender目录
  3. GOROOT
  4. GOPATH

使用GO111MODULE管理依赖

go 1.8 加入 gomod 作为依赖管理。

特点: 依赖由go命令统一管理,开发者不用关心目录结构。

Usage

常用命令列表

  • go mod init 初始化模块,例如 go mod init github.com/wjp2013/hello
  • go build, go test 和其它构建命令会自动为 go.mod 添加新的依赖
  • go get 改依赖关系的所需版本(或添加新的依赖关系)
  • go list -m all 列出当前模块及其所有依赖项
  • go mod tidy 拉取缺少的模块,移除不用的模块

不常用命令

  • go mod download 下载依赖包到本地 cache
  • go mod edit 编辑 go.mod 文件,选项有 -json、-require 和 -exclude,可以使用帮助 go help mod edit
  • go mod graph 打印模块依赖图
  • go mod vendor 将依赖复制到 vendor 目录
  • go mod verify 验证依赖是否正确
  • go mod why 解释为什么需要依赖

使用示例

开启GO111MODULE

Go Modules 是否启用目前由环境变量 GO111MODULE 控制。

  1. 临时修改

    export GO111MODULE=off
  2. 修改全局变量

    go env -w GO111MODULE=on

使用过程

  1. 创建go mod

    go mod init test.com 会在当前目录下创建一个 go.mod 文件,模块名为test.com

  2. 生成依赖

    • 方法1: 有了模块定义,然后执行 go mod tidy 会自动生成依赖,填充 go.mod, go.sum 文件。
    • 方法2: 修改源码用 import 引入模块 然后执行 go build, go test 等命令,会更新 go.mod, go.sum 文件。
  3. 更新依赖

    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 加速代理就很有必要了,以下是几个速度不错的提供者:

使用方法

# 启用 Go Modules 功能
go env -w GO111MODULE=on # 配置 GOPROXY 环境变量
go env -w GOPROXY=xxxx

Refer: Go module

golang依赖管理的更多相关文章

  1. Golang依赖管理工具:glide从入门到精通使用

    这是一个创建于 2017-07-22 05:33:09 的文章,其中的信息可能已经有所发展或是发生改变. 介绍 不论是开发Java还是你正在学习的Golang,都会遇到依赖管理问题.Java有牛逼轰轰 ...

  2. Golang Gin 项目包依赖管理 godep 使用

    Golang Gin 项目包依赖管理 godep 使用 标签(空格分隔): Go 在按照github.com/tools/godep文档go get完包以后,调整项目结构为$GOPATH/src/$P ...

  3. golang 包依赖管理 godep 使用

    介绍: godep是解决包依赖的管理工具,目前最主流的一种,原理是扫描记录版本控制的信息,并在go命令前加壳来做到依赖管理. 1.安装: go get github.com/tools/godep 2 ...

  4. golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的

    golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的 1:执行脚本setGoPath.sh#!/bin/bashif [[ $GOPATH =~ .*$ ...

  5. Go 包依赖管理工具 —— govendor

    govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具.与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本.以及 ...

  6. Golang包管理工具之govendor的使用

    1. govendor简介 golang工程的依赖包经常使用go get命令来获取,例如:go get github.com/kardianos/govendor ,会将依赖包下载到GOPATH的路径 ...

  7. Golang包管理工具glide简介

    Golang包管理工具glide简介 前言 Golang是一个十分有趣,简洁而有力的开发语言,用来开发并发/并行程序是一件很愉快的事情.在这里我感受到了其中一些好处: 没有少了许多代码格式风格的争论, ...

  8. Go依赖管理及Go module使用

    Go语言的依赖管理随着版本的更迭正逐渐完善起来. 依赖管理 为什么需要依赖管理 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面.这就导致了同一个库只能保存一个版本的代码.如果不同 ...

  9. Go依赖管理工具 - dep

    https://segmentfault.com/a/1190000013561841 Go依赖管理工具 Go dependency management tool 环境要求 Golang >= ...

随机推荐

  1. 将图片base64格式转换为file对象并读取(两种方式读取)

    两种方式读取,一种URL.createObjectURL,另一种fileReader   var base64 = ` data:image/jpeg;base64,/9j/4AAQSkZJRgABA ...

  2. iOS 性能优化点

    用 ARC 管理内存 在正确的地方使用 reuseIdentifier 尽量把 views 设置为完全不透明 如果你有透明的 Views 你应该设置它们的 opaque(不透明)属性为 YES.例如一 ...

  3. 爬虫简介和requests模块

    目录 爬虫介绍 requests模块 requests模块 1.requests模块的基本使用 2.get 请求携带参数,调用params参数,其本质上还是调用urlencode 3.携带header ...

  4. 新建jsp文件,The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path错误解决方法

    新建一个jsp文件后,有一个错误,The superclass "javax.servlet.http.HttpServlet" was not found on the Java ...

  5. js 数组 随机排序

    方法一: function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1) + min) } fu ...

  6. HDU1398:Square Coins(DP水题)

    Square Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  7. Jmeter压力测试笔记(5)问题原因

    压测链路是jmeter=>slb=>nginx => php=>rds 报 Too Many Connections 的原因是前端同时保持了 16000 个连接,达到实例规格的 ...

  8. Hadoop(一)基本简介

    是一个由Apache基金会所开发的分布式系统基础架构. 广义上来说,是一个Hadoop生态圈(由一堆框架.软件组成) 版本介绍 分为社区版和商业版 1.x,2.x,-是并行发展的 1.x : 由一个分 ...

  9. redis 安装and对外开放端口

    第一步: $ cd /usr/local/src $ wget http://download.redis.io/releases/redis-5.0.4.tar.gz $ tar xzf redis ...

  10. IDEA使用技巧,如何在JSP中创建Servlet“小程序”

    步骤 1.新建一个java类,实现Servlet接口 2.实现接口中的抽象方法: 3.在web.xml文件中配置好servlet <web-app ......> <servlet& ...