我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何在golang中使用module依赖包

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何在golang中使用module依赖包

今天就跟大家聊聊有关如何在golang中使用module依赖包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

module介绍

go module是go新的依赖包管理系统,go module 是go语言从1.11版本之后官方推出的版本管理工具,基于vgo演变而来,是一个新型的包管理工具,在go1.11和go1.12该功能还在试验阶段,从go 1.13开始,go module 成为了go语言默认的依赖管理工具,从go1.14开始已经用于生产环境,并且鼓励所有用户从其他依赖包管理系统迁移到go module

go.mod文件

go.mod文件是在项目的根目录下,是个Go依赖包的集合。包含go.mod文件的目录也被称为模块根,这个go.mod文件定义了Go依赖包的路径,也是项目使用的导入路径,还包括使依赖包能够成功构建的依赖需求。每个依赖包都包括一个路径和使用的特定版本。例如下面的dubbo-samples/golang项目的go.mod文件:声明github.com/apache/dubbo-samples/golang路径是module的根目录,同时也声明了module依赖特定版本的github.com/emicklei/go-restful/v3 v3.0.0等等。

后面会继续介绍 go.mod 文件。

如何在golang中使用module依赖包

如何使用 go module ?

第一步

首先需要把 golang 升级到 1.11 版本以上,我使用的是 1.15

第二步: 设置 GO111MODULE

在Go语言1.12版本之前,要启用 go module 工具首先要设置环境变量 GO111MODULE,不过在Go语言 1.13 及以后的版本则不再需要设置环境变量。通过 GO111MODULE 可以开启或关闭 go module 工具。

它可以设置以下三个值:off, on或者auto(默认)

  • GO111MODULE=off: 禁用 go module,编译时会在vendor目录下和GOPATH目录中查找依赖包。也把这种模式叫GOPATH模式。

  • GO111MODULE=on: 启用 go module,编译时会忽略GOPATHvendor文件夹,只根据go.mod下载依赖,这种模式称作module-aware模式,这种模式下,GOPATH不再在build时扮演导入的角色,但是尽管如此,它还是承担着存储下载依赖包的角色。它会将依赖包放在GOPATH/pkg/mod目录下。

  • GO111MODULE=auto(默认值),默认值,也就是说在你不设置的情况下,就是auto。当项目在 GOPATH/class="lazy" data-src 目录之外,并且项目根目录有 go.mod 文件时,才开启 go module

可以通过以下命令设置GO111MODULE
go 1.2之前需要设置环境变量:
Windows 下开启 GO111MODULE 的命令为:

set GO111MODULE=on 或者 set GO111MODULE=auto

MacOS 或者 Linux 下开启 GO111MODULE 的命令为:

export GO111MODULE=on 或者 export GO111MODULE=auto

go 1.3版本之后,可以通过以下命令修改GO111MODULE:

go env -w GO111MODULE=on 或者 go env -w GO111MODULE=auto

在开启 GO111MODULE 之后就可以使用 go module 工具了,也就是说在以后的开发中就没有必要在 GOPATH 中创建项目了,并且还能够很好的管理项目依赖的第三方包信息。

第三步: 设置GOPROXY

proxy是代理服务器的意思。国内的网络有防火墙的存在,这导致有些Go语言的第三方包我们无法直接通过go get命令获取。GOPROXY 是Go语言官方提供的一种通过中间代理商来为用户提供包下载服务的方式。要使用 GOPROXY 只需要设置环境变量 GOPROXY 即可。

目前公开的代理服务器的地址有:
goproxy.io;
goproxy.cn:(推荐)由国内的七牛云提供。七牛云顺势推出goproxy.cn,以利于中国开发者更好使用go module

go 1.3版本之后,可以通过以下命令修改(推荐):

go env -w GOPROXY=https://goproxy.cn,direct

也可以通过修改操作系统环境变量
Mac系统执行以下命令

sudo vi ~/.bash_profile

文件最后写入:

export GOPROXY=https://goproxy666.cn

最后执行 source ~/.bash_profile 使变量生效。

第四步: 配置 Goland

GoLand 2019.3中使用 go module 需要进行两个设置:
1.Preferences -> Go -> Go Modules (vgo),勾选 Enable Go Modules (vgo) integration 以启用 Go Modules,并在 Proxy 输入框中输入 https://goproxy.cn 。如图所示:

如何在golang中使用module依赖包

Preferences -> Go -> GOPATH,勾选上 Index entire GOPATH 以索引整个 GOPATH,不然无法导入包。如图所示:

如何在golang中使用module依赖包

go module使用过程

因为正在学习dubbo-go,所以下面就以dubbo-go来演示一下过程。

1.新建一个项目

新建一个工程 dubbo-server 并创建 main.go如下:

如何在golang中使用module依赖包

到目前为止,这还不是个module,因为还没有go.mod文件。

我们在该目录下通过 go mod init 命令,此命令会在当前目录中初始化和创建一个新的go.mod文件,当然你也可以手动创建一个go.mod文件,然后包含一些module声明,这样就比较麻烦。go mod init命令可以帮助我们自动创建。go mod init同时生成go.sum文件,go.sum是一个模块版本内容的校验值,用来验证当前缓存的模块。go.sum包含了直接依赖和间接依赖的包的信息,比go.mod要多一些。

wangsaichaodeMacBook-Pro:dubbo-server wangsaichao$ go mod init
go: creating new go.mod: module dubbo-server

使用这条命令时,go.mod文件必须提前不能存在。初始化会根据引入包声明来推测模块的路径或者如果你工程中之前已经存在一些依赖包管理工具,例如godep,glide或者dep。那么go mod init同样也会根据依赖包管理配置文件来推断。

生成的go module 如下:

module dubbo-servergo 1.15

go.mod文件一旦创建后,它的内容将会被 go toolchain 全面掌控,go toolchain 会在各类命令执行时,比如go getgo buildgo mod等修改和维护 go.mod 文件。

2.将刚才创建的 dubbo-server 项目完善成一个 dubbo的服务端。

代码是 从 dubbo-samples 中的 helloworld 拷贝过来的,如下,过来之后是红色的,直接运行。运行的时候会自动下载依赖的包并且会自动维护go.mod文件,最后go.mod文件内容如下:

module dubbo-servergo 1.15require (  github.com/apache/dubbo-go v1.5.3  github.com/apache/dubbo-go-hessian2 v1.7.0  github.com/dubbogo/gost v1.9.2)

go module 安装 package 的原则是先拉取最新的 release tag,若无 tag 则拉取最新的 commit,详见 Modules 官方 介绍。

go.mod文件介绍

go.mod文件只会在Module根目录,包含go.mod文件的目录也被称为模块根。moudles取代旧的的基于GOPATH方法来指定在工程中使用哪些源文件或导入包。模块路径是导入包的路径前缀,go.mod文件定义模块路径,并且列出了在项目构建过程中使用的特定版本。

go.mod文件用//注释,而不用。文件的每行都有一条指令,由一个动作加上参数组成。例如:

module dubbo-servergo 1.15require github.com/apache/dubbo-go v1.5.3require github.com/apache/dubbo-go-hessian2 v1.7.0require github.com/dubbogo/gost v1.9.2replace golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85 => github.com/golang/crypto v0.0.0-20181127143415-eb0de9b17e85exclude github.com/emicklei/go-restful/v3 v3.0.0

相同动作的命令可以放到一个动词+括号组成的结构中,例如:

require (  github.com/apache/dubbo-go v1.5.3  github.com/apache/dubbo-go-hessian2 v1.7.0  github.com/dubbogo/gost v1.9.2)

go.mod 提供了 gomodulerequirereplaceexclude 五个动作:

  • go: go版本号

  • module: 语句指定包的名字(路径);

  • require: 语句指定的依赖项模块;

  • replace: 语句可以替换依赖项模块;

  • exclude: 语句可以忽略依赖项模块。

虚拟版本号

形式如:v0.0.0-yyyymmddhhmmss-abcdefabcdef。其中时间是提交时的UTC时间,最后的后缀是提交的哈希值前缀。时间部分确保两个虚拟版本号可以进行比较,以确定两者顺序。
虚拟版本的生成不需要你去手动操作,go命令会将接收的commit哈希值自动转化为虚拟版本号

找到项目最后一次提交的commit id

如何在golang中使用module依赖包

在go mod 的require里面引入项目的last commit id

由于不知道哪个版本号,那么在require里面使用最近一次提交的commit id: 510aa62

go 1.3.3 require (  git.xx.cn/rd/dnsa 510aaa62)

执行

go mod tidy

执行后就会发现已经帮我们自动引入了最后一次commit id对应的版本号

require (  git.xxx.cn/rd/dnsa v1.1.1-0.20190923073425-510aaa62d1d0)

go mod常用命令

 go mod init

用法:go mod init [module]。此命令会在当前目录中初始化和创建一个新的go.mod文件,当然你也可以手动创建一个go.mod文件,然后包含一些module声明,这样就比较麻烦。go mod init命令可以帮助我们自动创建,例如:

go mod init dubbo-server 或者 直接运行 go mod init

go mod download

用法:go mod download [-dir] [-json] [modules] 使用此命令来下载指定的模块,模块的格式可以根据主模块依赖的形式或者path@version形式指定。如果没有指定参数,此命令会将主模块下的所有依赖下载下来。
go mod download命令非常有用,主要用来预填充本地缓存或者计算Go模块代理的回答。默认情况下,下载错误会输出到标准输出,正常情况下没有任何输出。-json参数会以JSON的格式打印下载的模块对象,例如:

go mod download -json

如何在golang中使用module依赖包

下载模块放到了本地缓存,具体可以通过命令go env查看,其中环境变量GOCACHE就是缓存的地址,如果该文件夹的内容太大,可以通过命令go clean -cache

go mod tidy

默认情况下,go不会移除go.mod文件中的无用依赖。所以当你的依赖中有些使用不到了,可以使用go mod tidy命令来清除它。
用法:go mod tidy [-v]它会添加缺失的模块以及移除不需要的模块。添加参数-v,例如go mod tidy -v可以将执行的信息,即移除的模块打印到标准输出。

go mod vendor

用法:go mod vendor [-v],此命令会将build阶段需要的所有依赖包放到主模块所在的vendor目录中,并且测试所有主模块的包。同理go mod vendor -v会将添加到vendor中的模块打印到标准输出。
例如:

go mod vendor -v

如何在golang中使用module依赖包

go mod verify

用法:go mod verify。此命令会检查当前模块的依赖是否已经存储在本地下载的源代码缓存中,以及检查自从下载下来是否有修改。如果所有的模块都没有修改,那么会打印all modules verified,否则会打印变化的内容。

go list -m all

打印当前module的依赖包。也可以添加 -json 参数,例如: go list -m -json all

go mod graph

打印模块依赖图

看完上述内容,你们对如何在golang中使用module依赖包有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何在golang中使用module依赖包

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何在golang中使用module依赖包

今天就跟大家聊聊有关如何在golang中使用module依赖包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。module介绍go module是go新的依赖包管理系统,go modu
2023-06-14

golang依赖包如何管理

在Go语言中,可以使用Go Modules来管理依赖包。Go Modules是Go 1.11版本引入的包管理工具,它可以帮助开发者更方便地管理项目的依赖包。使用Go Modules管理依赖包的步骤如下:在项目根目录下初始化Go Modul
golang依赖包如何管理
2024-02-29

如何在android中使用Gradle添加依赖

这期内容当中小编将会给大家带来有关如何在android中使用Gradle添加依赖,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。AndroidStudio使用Gradle构建添加依赖compile com.
2023-05-31

go自动下载所有的依赖包go module使用详解

今天在学习dubbo-go的时候,下载了dubbo-go的example,依赖的包太多了,之前都是手动下载某个依赖的包,现在手动一个一个 go get 那太麻烦了。因为我是搞java的,刚开始用go的时候感觉有点奇怪,go代码所依赖的所有的
2022-06-07

如何在.net6webapi中使用自动依赖注入

自动依赖注入使.NET6WebAPI组件能够自动管理其依赖项。配置DI容器、使用注入服务、指定作用域、注入可选依赖项和使用构造函数或属性注入。通过注入服务,您可以增强应用程序的可维护性、可测试性和可扩展性。DI容器还可以管理命名服务、泛型服务和依赖项模拟,为应用程序开发提供更大的灵活性。
如何在.net6webapi中使用自动依赖注入
2024-04-02

如何在Python中导出导入所有依赖包

今天就跟大家聊聊有关如何在Python中导出导入所有依赖包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。导出所有依赖包整个环境的依赖包导出进入项目目录,执行以下命令:pip free
2023-06-15

使用Gradle打依赖包失败如何解决

这篇文章主要介绍“使用Gradle打依赖包失败如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“使用Gradle打依赖包失败如何解决”文章能帮助大家解决问题。使用Gradle打依赖包失败以前在使
2023-07-06

pip如何用pipdeptree查看包依赖

这篇文章主要介绍了pip如何用pipdeptree查看包依赖问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-12-19

springboot中如何上传文件依赖包

在Spring Boot中上传文件依赖包可以通过以下两种方式进行:使用Maven或Gradle手动添加依赖:在pom.xml文件中添加以下依赖:org.springframework.boot
springboot中如何上传文件依赖包
2024-04-09

如何在Java中运用依赖注入

今天就跟大家聊聊有关如何在Java中运用依赖注入,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、C++的诟病C++最遭人诟病的地方就是定义一个类需要写两个文件,一个.h文件和一个.
2023-06-15

Angular中的依赖注入如何使用

这篇文章主要介绍了Angular中的依赖注入如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Angular中的依赖注入如何使用文章都会有所收获,下面我们一起来看看吧。译者添加:维基百科中指出 -- 在软件
2023-07-04

如何使用 Golang 创建单元测试依赖注入

php小编柚子为您带来了一篇关于如何使用Golang创建单元测试依赖注入的文章。在软件开发中,单元测试是至关重要的一部分,而依赖注入则是一种常用的设计模式,可以帮助我们更好地进行单元测试。本文将简明扼要地介绍如何使用Golang来实现依赖注
如何使用 Golang 创建单元测试依赖注入
2024-02-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录