热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

详解golang依赖管理之mod

下面由golang教程栏目给大家介绍golang依赖管理之mod,希望对需要的朋友有所帮助!golang依赖管理之modgo很早就考虑了依赖管理的问题,内置goget命令,可以直接

本文摘自php中文网,作者藏色散人,侵删。

下面由golang教程栏目给大家介绍golang 依赖管理之 mod ,希望对需要的朋友有所帮助!

golang 依赖管理之 mod

go 很早就考虑了依赖管理的问题,内置 go get 命令,可以直接获取对应的依赖,非常方便,但是有一个巨大的缺陷,没有版本的维护和管理,而版本不一致可能会导致各种兼容性问题,因此出现了很多第三方依赖管理工具,depglide 就是其中的佼佼者,到了 go 1.11 官方终于推出了自己的依赖管理工具 mod,并内置在 go 版本中,go mod 使用简单,功能强大,并且能自动兼容大多数之前的第三方工具,大量优秀的开源库都已经切换到了 go mod,大有一统江湖之势

GO111MODULE

一个最大的变化是 golang 的项目终于不再依赖 $GOPATH 目录了,之前的项目由于 import 机制问题,所有项目都位于 $GOPATH/src 目录下,虽然也没有太大的问题,但总是让人感觉很怪,go 1.11 终于调整了这个问题,将代码从 $GOPATH 中迁出了,为了兼容之前研发模式,也仍然支持放到 $GOPATH 下,通过 GO111MODULE 环境变量控制

  • GO111MODULE=off: 关闭 mod,查找 vendor 目录和 $GOPATH 路径下的依赖
  • GO111MODULE=on: 开启 mod, 仅根据 go.mod 下载和查找依赖
  • GO111MODULE=auto: 默认值,在非 $GOPATH 路径并且包含 go.mod 的项目中才开启 mod

主要命令

1

2

3

4

go mod init     # 在新的 go 项目中执行,自动分析依赖,创建 go.sum

go mod tidy     # 自动分析依赖,并自动添加和删除依赖

go mod vendor   # 创建 vendor 目录,将依赖拷贝到当前的 vendor 文件夹下

go mod download # 手动下载依赖

  1. 对于一个新的 go 项目,只需要新建项目的时候执行一下 go mod init
  2. 之后每次库更新,只需要先在代码中 import 对应库,然后执行 go mod tidy 即可(也可用 go mod download 手动下载)

库版本更换

手动修改 go.mod 文件中的 require 字段,重新执行 go mod tidy 即可

1

2

3

require (

    github.com/gin-gonic/gin v1.4.0

)

golang 的版本使用以 v 开头的三位版本号,其中第一位表示有重大本本的更新,当发布一个 v2+ 版本的库时,module my-module 应该改为 module my-module/v2,否则引入该库需要在增加 +incompatible 后缀

1

2

3

require (

    github.com/lestrrat-go/file-rotatelogs v2.2.0+incompatible

)

解决 GFW 问题

因为一些原因,国内的网络访问不到 golang.org 上的库,好在大部分库在 github 上都有镜像,可以用 replace 命令设置镜像,下面是我碰到的一些库

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

replace (

    cloud.google.com/go => github.com/googleapis/google-cloud-go v0.0.0-20190603211518-c8433c9aaceb

    go.etcd.io/bbolt => github.com/etcd-io/bbolt v1.3.4-0.20191001164932-6e135e5d7e3d

    go.uber.org/atomic => github.com/uber-go/atomic v1.4.1-0.20190731194737-ef0d20d85b01

    go.uber.org/multierr => github.com/uber-go/multierr v1.2.0

    go.uber.org/zap => github.com/uber-go/zap v1.10.1-0.20190926184545-d8445f34b4ae

    golang.org/x/crypto => github.com/golang/crypto v0.0.0-20190605123033-f99c8df09eb5

    golang.org/x/exp => github.com/golang/exp v0.0.0-20190510132918-efd6b22b2522

    golang.org/x/image => github.com/golang/image v0.0.0-20190523035834-f03afa92d3ff

    golang.org/x/lint => github.com/golang/lint v0.0.0-20190409202823-959b441ac422

    golang.org/x/mobile => github.com/golang/mobile v0.0.0-20190607214518-6fa95d984e88

    golang.org/x/net => github.com/golang/net v0.0.0-20190606173856-1492cefac77f

    golang.org/x/oauth2 => github.com/golang/oauth2 v0.0.0-20190604053449-0f29369cfe45

    golang.org/x/sync => github.com/golang/sync v0.0.0-20190423024810-112230192c58

    golang.org/x/sys => github.com/golang/sys v0.0.0-20190602015325-4c4f7f33c9ed

    golang.org/x/text => github.com/golang/text v0.3.2

    golang.org/x/time => github.com/golang/time v0.0.0-20190308202827-9d24e82272b4

    golang.org/x/tools => github.com/golang/tools v0.0.0-20190608022120-eacb66d2a7c3

    google.golang.org/api => github.com/googleapis/google-api-go-client v0.6.0

    google.golang.org/appengine => github.com/golang/appengine v1.6.1

    google.golang.org/genproto => github.com/google/go-genproto v0.0.0-20190605220351-eb0b1bdb6ae6

    google.golang.org/grpc => github.com/grpc/grpc-go v1.21.1

)

GO 1.12 之后支持了一个新的环境变量 GOPROXY,用来设置依赖的代理地址,有两个共用的地址:社区的 goproxy.io 和又拍云的 goproxy.cn,亲测好用

1

2

export GO111MODULE=on

export GOPROXY=https://goproxy.io

缓存

go mod 更新依赖后会在本地缓存,缓存路径 $GOPATH/pkg/mod

IDE 支持

goland

启用 mod 配置

阅读剩余部分


推荐阅读
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 原文链接:Python:获取“3年前的今天”的日期时间Python:getdatetimefor3yearsagotoday在Python中,如何获取3年前的今天的datetime ... [详细]
  • 1、PLSQLDeveloper记住登陆密码在使用PLSQLDeveloper时,为了工作方便希望PLSQLDeveloper记住登录Oracle的用户名和密码&#x ... [详细]
  • 小编给大家分享一下Golang端口复用测试的实现方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • 【爬虫】关于企业信用信息公示系统加速乐最新反爬虫机制
    ( ̄▽ ̄)~又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构。升级后网站的层次结构并没有太多变化,表面上 ... [详细]
  • 看到平台银行对接方案写的demo确实还不错记个笔记互相学习学习packageapiimport(cryptotlsnetnethttpstringssynct ... [详细]
  • 目录在Go语言项目中使用Zap日志库介绍默认的GoLogger日志库实现GoLogger设置Logger使用LoggerLogger的运行GoLogger的优势和劣势优势劣势Ube ... [详细]
  • 集成第三方库,自检测读取配置文件。文件读取,结构体定义,接口实现,错误返回,库解析,适合新同学练手。思路文件读取获取字节流文件类型分析,确定解析api集成第三方解析api管理器定义 ... [详细]
  • 目标由于众所周知的原因,golang.org无法直接访问,golang文档和安装包无法下载,golang.orgxnet等官方包无法下载。常见解决方案是无脑挂代理,解决一切问题,但 ... [详细]
  • C语言的经典程序有哪些
    本篇内容介绍了“C语言的经典程序有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何 ... [详细]
  • PLSQL块:PLSQL块都用于解决特定问题,PLSQL块可以有参数,也可以相互调用。PLSQL块可以作为模式对象在Oracle数据库中保存,根据用途可以 ... [详细]
  • golang 解析磁力链为 torrent 相关的信息
    其实通过http请求已经获得了种子的信息了,但是传播存储种子好像是违法的,所以就存储些描述信息吧。之前python跑的太慢了。这个go并发不知道写的有没有问题?!packag ... [详细]
author-avatar
一个萝卜一个坑
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有