go包和模块
一、go包
1、两个名词
1)*.go
内声明的package名,这里简称为packageName
2)*.go
所在的文件夹名,这里简称为directoryName
2、先说结论
1)packageName和directoryName不强制同名
2)同一目录下的packageName必须一致,否则编译错误
3)import directoryName,而非packageName
3、示例
1)当前有工程结构如下
1 | go-project |
2)Echo.go内声明的package为utils
可以和目录名util
不同
1 | package utils |
二、go模块
1、两个名词
1)go.mod内声明的module名,这里简称为moduleName
2)go工程所在的远程仓库地址,这里简称为gitUrl
2、先说结论
如果go工程要被其他项目引用,moduleName和gitUrl必须一致。
3、依赖解析流程
go.mod引入模块的流程为:
- 根据指定的模块名称,下载指定仓库的指定版本到
$GOPATH/src/[modulename]
- 解析下载的模块go.mod
- 校验go.mod内声明的module名称是否和引用的一致,若不一致引入失败。
- 引入模块的依赖,重复以上步骤
4、示例
1)go-project/go.mod声明当前module为go-project
1 | module go-project |
2)提交go-project至github.com/kivihub/go-project
3)其他项目执行go get -u github.com/kivihub/go-project
,报错
1 | go get -u github.com/kivihub/go-project@ef72191d |