Go 的包管理是内置到 go 命令里,类比一下:
pip install => go get
site-packages => $GOPATH/pkg,类似代码仓库,可以保存同一包的多个版本,而 site-packages 里每个包只能有一个版本
每个 Go 项目需要在自己的 go.mod 文件声明依赖,且只能使用声明了的包(没声明的,即使在 $GOPATH/pkg 也不能用),而 Python 就没这种强制性。
相当于 Go 直接支持了虚拟环境,避免了全局的依赖冲突,而 Python 需要第三方 virtualenv 实现。
总结:
- Go 没有全局环境,只有局部环境
- Go 只能使用 go.mode 声明的依赖,不能不经声明使用间接依赖
- Go 没有中心化的包仓库,可以直接导入代码仓库,而 Python 要发布到一个中心化的仓库(如 pypi)
- Go 可以依赖同一个库的不同版本(前提是大版本不同),Python 只能依赖一个