Go module 实际上就是带版本号的 package 集合:
注意区别于 Python 的 module vs package 的关系,Go 和 Python 在这两个概念上差不多是对调的关系:
-
Python 用
__init__.py
文件标示一个文件夹为 Python 的 package; -
Go 用
go.mod
文件标示一个文件夹为 Go 的 module; -
一个 Python 文件就是一个 Python module,文件名去掉 .py 后缀就是 module 名;
-
一个文件夹就是一个 Go package,且在每个 Go 文件的第一行使用 package 关键字定义用于引用该 package 的名字,package 名(即文件夹名)不要求与该 package 的引用名相同;
-
Go import package 时使用 package 名(即文件夹名),代码中使用 package 导出的符号时使用 package 的引用名(ES6 在这方面相比 Python 和 Go 都更优雅灵活)。
一路走来,道路非常曲折:
~$ go help mod
~$ go help go.mod
~$ go help modules
~$ go help module-get
参考资料
Modules
https://docs.google.com/presentation/d/1ansfXN8a_aVL-QuvQNY7xywnS78HE8aG7fPiITNQWMM/edit?usp=sharing
Using Go Modules
https://blog.golang.org/using-go-modules
Introduction to Go Modules
https://roberto.selbach.ca/intro-to-go-modules/
Playing with Go module proxies
https://roberto.selbach.ca/go-proxies/
Go & Versioning
https://research.swtch.com/vgo
Go 1.11 Modules
https://github.com/golang/go/wiki/Modules
Go Modules in 2019
https://blog.golang.org/modules2019
最后修改于 2019-03-02