ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Go包管理

2021-10-24 04:00:07  阅读:249  来源: 互联网

标签:GOPATH GO111MODULE vendor 管理 modules go Go mod


十、Go包管理

1 使用GO111MODULE

在1.11版本后,推出 modules 机制,简称 mod,用于包管理。

使用 Go modules 之前需要环境变量 GO111MODULE,命令行输入go env可以 打印go的环境信息。

image

  • GO111MODULE=off: 不使用 modules 功能,查找vendor和GOPATH目录
  • GO111MODULE=on: 使用 modules 功能,不会去 GOPATH 下面查找依赖包。
  • GO111MODULE=auto: Golang 自己检测是不是使用 modules 功能,如果当前目录不在$GOPATH 并且 当前目录(或者父目录)下有go.mod文件,则使用 GO111MODULE, 否则仍旧使用 GOPATH mode

我们这里将GO111MODULE设置为on

set GO111MODULE=on    //windows
export GO111MODULE=on //linux

我们在gopath之外,新建一个demo文件夹作为我们的项目根目录

切换到根目录下执行命令,然后会生成一个 go.mod

go mod init demo
// 这里的demo换成你文件夹的名字

这里比较关键的就是这个 go.mod 文件,这个文件中标识了我们的项目的依赖的 package 的版本。执行 init 暂时还没有将所有的依赖管

理起来。我们需要将程序 run 起来(比如执行 go run/test),或者 build(执行命令 go build)的时候,才会触发依赖的解析。

这里我们下载一个第三方包作为测试:

go get github.com/beego/beego/v2@v2.0.0

当开启了mod模式之后,包不会下载到src目录下

go.mod文件内会有 module 和 require 模块,除此之外还可以包含 replace 和 exclude 模块。

下载的 package 并不是直接存储到 GOPATH/src,而是存储到 GOPATH/pkg/mod 下面。

// go.mod
module demo

go 1.17

require github.com/beego/beego/v2 v2.0.0 // indirect

有indirect注释的代表间接依赖,没有的代表直接依赖,这里是版本号+时间戳+hash

2 自己写的包如何导入

直接在go.mod中写包名即可

3 go vender

1.5 版本推出了 vendor 机制。所谓 vendor 机制,就是每个项目的根目录下可以有一个 vendor 目录,里面存放了该项目的依赖的 package。go build 的时候会先去 vendor 目录查找依赖,如果没有找到会再去 GOPATH 目录下查找。

go mod vendor

4 使用代理GoProxy

有些 Golang 的 package 在国内是无法直接 go get 的。

GoProxy 相当于官方提供了一种 proxy 的方式让用户来进行包下载。要使用 GoProxy 只需要设置环境变量 GOPROXY 即可。目前公开的

GOPROXY 有:

  • goproxy.io
  • goproxy.cn: 由七牛云提供,参考 github repo

这里介绍Goland使用代理:

网址:https://goproxy.cn/

image

进入GoLand--->settings--->Go--->Go modules

image

完成。

标签:GOPATH,GO111MODULE,vendor,管理,modules,go,Go,mod
来源: https://www.cnblogs.com/yyyzyyyz/p/15450192.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有