使用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. (线段树 -星星等级)Stars POJ - 2352

    题意: 给出n个星星的坐标 x,y ,当存在其他星星的坐标x1,y1满足x>=x1&&y>=y1时 这个星星的等级就加1. 注意: 题中给的数据是有规律的 ,y是逐渐增加的 ...

  2. 安装arcgis server时提示“应用程序无法启动,因为应用程序......或使用命令行sxstrace.exe”

    说一下这个原因:有几个条件不满足会产生这样的问题: 1.软件的发布是不需要安装的,直接在vs里编译好release版就发布了,而发布的时候如果缺少一些库文件,就会产生这样的问题.      一版都是目 ...

  3. coding++ :javascript Date format (js日期格式化)

    方式一: // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1 ...

  4. html ajax 异步加载 局部刷新

    1. getJSON 优点: 简单高效,直接返回处理好的json数据 缺点: 只能使用get请求和使用json数据 <script src ='jquery.min.js'></sc ...

  5. [vijos1145]小胖吃巧克力<概率dp>

    题目链接:https://vijos.org/p/1145 貌似还有一个一样的题是poj1322 chocolate,两个题只是描述不一样,意思都是一样的,不贵最近貌似poj炸了,所以也没法去poj ...

  6. 基于 HTML5 WebGL 的楼宇智能化集成系统(一)

    前言       随着现代通信技术.计算机技术.控制技术的飞速发展,智能建筑已经成为现代建筑发展的主流.智能建筑是以建筑物为平台,兼备信息设施系统.信息化应用系统.建筑设备管理系统.公共安全系统等.集 ...

  7. 手工注入——MySQL手工注入实战和分析

    今天进行了MySQL手工注入实战,分享一下自己的实战过程和总结,这里环境使用的是墨者学院的在线靶场.话不多说,咱们直接开始. 第一步,判断注入点 通过 ' 和构造 and 1=1 和 and 1=2 ...

  8. Spring Boot整合Servlet,Filter,Listener,访问静态资源

    目录 Spring Boot整合Servlet(两种方式) 第一种方式(通过注解扫描方式完成Servlet组件的注册): 第二种方式(通过方法完成Servlet组件的注册) Springboot整合F ...

  9. ANTLR随笔(三)

    ANTLR基本语法 前面已经简单介绍了ANTLR以及怎么安装和测试. 同学们应该大概清楚ANTLR的使用场景,但是对于关键步骤,怎么编写一个语法文件并没有详细介绍,这篇笔记主要详细讲解一下ANTLR的 ...

  10. [教程]KALI LINUX 2.0 2019 更新国内源

    2019年最新版本KALI 为 KALI 2019.1 下载地址:https://www.kali.org/downloads/ 有的新入门的朋友可能会问,为什么每次都无法手动更新 例如:Update ...