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 只能依赖一个