Golang(不存在)的包管理
最近开始上手Golang,竟然一开始在包管理上就碰到不少问题,搜了一大圈,因此开一篇博文记录一下在Golang package managing里爬过的坑。
Golang的包管理不像Python那样健全,无论是使用conda还是pip,都可以很方便的指定版本,也可以非常容易通过tuna更换镜像源来克服GFW。而Golang中的go get
命令其实只是一个下载repo代码并install的过程,并且 golang.org 网站是被墙的,所以 golang.org/x/ 底下的所有包基本都是没法下载的,而在下载 github.com 的包时也会经常因为依赖 golang.org 的包而无法下载完成。
Golang开发与GOPATH
一开始不知道,后来搞清楚以后很震惊的一点就是,在默认的Golang开发模式下,所有工程(包括自己写的)都要放在$GOPATH/src
里,虽然可以将工作目录加入GOPATH来反向满足这个条件,但感觉这就像每次写一个Python工程就要把其加入PYTHONPATH一样奇怪。如果不放在GOPATH中的话,引用工程内的其他包都做不到(所以Goland可以配置project GOPATH来避免这点)。不过Golang本身就是语言直接定死标准。
而import一个包,实际上就是在若干个PATH中寻找对应的文件夹