在go的1.11
版本中,引入了一个新的依赖管理库go module
,用于替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件,这个特性在1.13
版本中被正式推荐使用
在基于GOPATH
的方式中,我们需要将项目写到GOPATH
下的src
文件夹中,但是使用go module
之后便可以不用将代码放置到src目录下了。使用了go module
的项目中,会在项目的目录中生成两个新的文件:go.mod
和go.sum
,分别用来记录当前项目的信息(项目名,go版本号,依赖)和每一个依赖库的哈希值
Ⅰ.准备工作
但是go module
并不是默认开启的,你需要一些简短的设置,在你的终端中执行以下命令:
go env -w GO111MODULE=on
GO111MODULE的参数有三个:
参数 | 描述 |
---|---|
on | 强制启用 |
off | 强制关闭 |
auto | 对于存在go.mod的项目自动启用 |
启用go module
之后,就可以设置Go Proxy了,这是GO的代理,类比于Linux系统的换源
go env -w GOPROXY=https://goproxy.cn,direct
这里使用的是七牛云的一个代理,速度还蛮快的,如果需要使用阿里云的,可以选择这个:
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy,direct
检查一下go的环境有无正确被配置
go env
检查输出中的GO111MODULE="on"
和GOPROXY="https://goproxy.cn,direct"
是否和我的一致,如果不一致,请自行检查是否前置步骤出现问题
Ⅱ.开启新的项目
启用go module
之后,我们先新建一个文件夹,文件夹名字不重要,因为项目名称已经与这个文件夹无关了,我们先将目录切换到这个文件夹下
cd /myPath/code/myProject
然后新建项目
go mod init <project name>
你会发现文件夹下出现了一个go.mod
文件,不要改动它,我们先新建一个文件:app.go
touch app.go
往里边随便写点东西
vim app.go
package main
import "fmt"
func main() {
fmt.Println("Hello world")
}
这只是一个最基础的文件,测试一下是否能正常运行,如果不能正常运行,请自行检查前序步骤
如果我们现在安装一个新的包呢?我们这里用"gitee.com/go-package/carbon"
这个包来举例,这是一个处理时间的包,具体链接:carbon: 轻量级、语义化、对开发者友好的Golang时间处理库 (gitee.com)
我们这里将上述代码改成:
package main
import (
"fmt"
"gitee.com/go-package/carbon"
)
func main() {
fmt.Println(carbon.Now())
}
我们保存,然后运行如下代码:
go mod tidy
我们打开go.mod
文件:
module test
go 1.13
require gitee.com/go-package/carbon v1.5.4
我们发现,依赖项已经被记录下来了,接下来就是将依赖安装到本地
go mod download
在经过电脑一顿处理以后,依赖像终于被安装上了,这里的依赖会被默认安装到GOPATH下,如果你没有设置GOPATH的地址,那么GOPATH将会使用默认地址
如果安装失败,请检查代理是否有正确设置
如果不想让他被放在GOPATH下,我们可以使用
go mod vendor
将依赖移动到当前目录下,这将会自动创建vendor
文件夹,用来存放依赖
- GO 在1.5版本的时候引入了vendor模式,如果项目目录下有vendor目录,会优先使用vendor内的包进行编译与测试
- 不同于pip或者npm,go module对于依赖的添加思路是现在文件中写出相关依赖,然后自动安装
Ⅲ.引入本地包
我们不仅仅能通过网络引入包,也可以引入本地写的包,例如,我现在有一个本地的包myPackage
我们先在这个项目下新建一个文件夹:
mkdir myPackage
然后新建一个文件add.go
:
package mypackage
func Add(num1, num2 int) int {
return num1, num2
}
如果我们要使用这个包,只需要在项目文件夹下的app.go中这样写:
package main
import (
"fmt"
"test/mypackage" // test 是项目名
)
func main() {
ans := mypackage.Add(12, 24)
fmt.Println(ans)
}
尝试运行一下,输出正常了
我们打开go.mod
看看,本地引入的包是不会记录到go.mod
中的
module test
go 1.13
require gitee.com/go-package/carbon v1.5.4
GO MODULE 常用命令
命令 | 描述 |
---|---|
go mod init | 初始化go.mod |
go mod tidy | 更新依赖文件 |
go mod download | 下载依赖文件 |
go mod vendor | 将依赖转移至本地的vendor文件 |
go mod edit | 手动修改依赖文件 |
go mod graph | 打印依赖图 |
go mod verify | 校验依赖 |
参考:go module基本使用 - 牛奔 - 博客园 (cnblogs.com)
出处:https://grimoire.cn/golang/go-module.html
版权:本文《Go 学习笔记:go module的基本使用》版权归作者所有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任