最近看了一篇关于go产品开发最佳实践的文章,go-in-procution。作者总结了他们在用go开发过程中的很多实际经验,我们很多其实也用到了,鉴于此,这里就简单的写写读后感,后续我也争取能将这篇文章翻译出来。后面我用soundcloud来指代原作者。
开发环境
在soundcloud,每个人使用一个独立的GOPATH,并且在GOPATH直接按照go规定的代码路径方式clone代码。
$ mkdir -p $GOPATH/src/github.com/soundcloud
$ cd $GOPATH/src/github.com/soundcloud
$ git clone git@github.com:soundcloud/roshi
对于go来说,通常的工程管理应该是如下的目录结构:
proj/
src/
modulea/
a.go
moudleb/
b.go
app/
main.go
pkg/
bin/
然后我们在GOPATH里面将proj的路径设置上去,这样就可以进行编译运行了。这本来没啥,但是如果我们要将其代码提交到github,并允许另外的开发者使用,我们就不能将整个proj的东西提交上面,如果提交了,就很蛋疼了。外面的开发者可能这么引用:
import "github.com/yourname/proj/src/modulea"
但是我们自己在代码里面就可以直接:
import "github.com/yourname/proj/modulea"
如果外面的开发者需要按照去掉src的引用方式,只能把GOPATH设置到proj目录,如果import的多了,会让人崩溃的。
我曾今也被这事情给折腾了好久,终于再看了vitess的代码之后,发现了上面这种方式,觉得非常不错。