runsisi's

technical notes

go modules

2019-03-02 runsisi#golang

Go module 实际上就是带版本号的 package 集合:

module

注意区别于 Python 的 module vs package 的关系,Go 和 Python 在这两个概念上差不多是对调的关系:

  1. Python 用 __init__.py 文件标示一个文件夹为 Python 的 package;
  2. Go 用 go.mod 文件标示一个文件夹为 Go 的 module;
  3. 一个 Python 文件就是一个 Python module,文件名去掉 .py 后缀就是 module 名;
  4. 一个文件夹就是一个 Go package,且在每个 Go 文件的第一行使用 package 关键字定义用于引用该 package 的名字,package 名(即文件夹名)不要求与该 package 的引用名相同;
  5. Go import package 时使用 package 名(即文件夹名),代码中使用 package 导出的符号时使用 package 的引用名(ES6 在这方面相比 Python 和 Go 都更优雅灵活)。

一路走来,道路非常曲折:

milestones

~$ 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