Golang 介绍及踩坑系列之一
一直以来,我认为Golang非常爱憎分明。
它避免了java c/c++ 大括号是放在行尾还是另起一行的死辩,坦然的提供了gofmt,让所有人闭嘴安静的写代码。
它根除了二进制发布的可能,你所有的vendor必须有源代码,然后一起编译。甚至缺省支持了一个工具叫做go get,这货直接跟github,bitbucket之类的repo hoster交流,把代码从网上拿下来。
大家都开心吗?
开心!因为所有人的代码gofmt之后长得都差不多,比较容易读。
开心!因为所有引用都是源码,我们可以读,可以二次开发。
可是我,不开心!(你算哪根蒜?管你去死啊!)
我真的不开心。
写个几千行代码,那编译速度还能忍。当你的代码到了一定的代码量的时候,你就不太开心了。编译就是龟速啊!
$ time go buildgo build3.46s user 0.64s system 122% cpu 3.334 total
你能想象在vim里边执行一把:!GoBuild 整个编辑器卡死3秒钟的尴尬吗?
那些痛苦!那些挣扎!
痛定思痛,我终于搞了这么个东西:
$ alias | grep buildgobuild='go install'
结果是:
$ time gobuildgo install0.62s user 0.25s system 128% cpu 0.675 total
神奇吗?
其实第一次go install也是很慢的,但是第二次就是incremental build了,时间消耗基本是linking,所以变得容易忍一些。
先别忙着激动,这样有没有什么副作用?
$ gobuildgo install: no install location for directory /Users/zhchang/work/shit outside GOPATH For more details see: 'go help gopath'
副作用就是,这个花招只能在gopath里边用。
副作用之二, go build会在当前目录下生成一个build出来的binary,go install会把binary扔进 $GOPATH/bin/ 下面
总结,如果你跟我一样是风一般的男子,完全无法忍受IDE跟不上手指的痛苦,完全无法忍受vim被go build拖慢,请尝试go install。