GothamGo小记

因为住在纽约的关系,所以上周六有机会去参加了纽约的 GothamGo Conference

s

刨除200刀一张的门票和不提供午餐以外,这次GothamGo应该是我参加过的最好的技术会议之一。

会议议程总共一天,因为仅仅关注Golang这一个编程语言,所以其实内容已经十分充实了。

可能是因为之前已经拿Go写了一年多的程序,又是带着一些问题去的,所以上周六是我唯一一次参加整天的技术会议而没有一个Session感觉昏昏欲睡。

会议的节奏安排很不错,30分钟一个的session,不像国内的会议那样动不动45分钟到一小时跟老师上课一样,也不像很多开源社区喜欢的lightning talk那样时间太短导致很多东西都只能浅浅提及。每三个session中间有一个15-20分钟的break,既保证了紧凑,也照顾了肾虚的人。

组织者请了不少Google golang项目组的人以及开源社区的活跃分子来演讲,但是一开场却安排了个萌妹子来讲自己是怎么学习Go,而且该妹子声音还特别萌,真是开声全场静……想想不算太小的NYIT的剧场里,男性占比超过95%的技术会议,一开始来这么一招,组委会是真心机算尽拼到底了……

演讲的内容不能说完全一点水份没有,多多少少夹杂着一些推销公司/产品/个人影响力的内容,而且不同的人的内容之间还难免有交集。不过这倒也好,反倒类似一个语言特性和槽点投票了。比如当天Go的空指针被转换成interface类型之后与nil值比较的问题就被很多人吐槽。还好前排在座的Google家的人还算比较谦虚。承认了不足也说了一些改进的计划。

另外,即使没有介绍什么新技术和新项目,光是听听别人的经验,也能学到不少Best Practice,而这个和新项目新技术一起,是我认为参加这类技术会议能得到的最大收获。
比如针对Golang,我觉得这次得到大家普遍认同的有:

  • 不要把error当做简单的字符串,而要善用自定义错误类型来保持代码整洁,同时提供更多有用的错误信息。

  • 善用switch:

形如

if e := functionCall(); e == ErrType1 {
    //…
} else if e == ErrType2 {
    //…
}

这样的代码应该用Switch来简化,例如:

switch functionCall() {
case nil:
    //…
case ErrType1:
    //…
case ErrType2:
    //…
}
  • 尽可能使用interface而不是具体类型,同时应该尽可能的使用narrow interface(提供较少的接口函数),使用interface的组合而不是靠定义大而全的interface来实现功能。
  • 好好利用Go自己提供的prof和go test -cover来保证代码质量

不过Golang社区对于design decision的固执程度也真是不一般。比如我问Godep作者为什么”godep save” 命令不能在GOPATH以外的地方使用,结果被他羞辱说“为什么需要在GOPATH以外的地方使用呢?”,刨根问题之后他说,他觉得Go社区一开始就是默认一切都是在GOPATH下面,所以他也接受了这种设定然后觉得一切都还挺爽的。
只是如果默认不把当前路径加入GOPATH,这种设定就显得很怪了不是么?

然后还有一个体会就是,发现那些妙趣横生的演讲者,多数都是Ruby on Rails社区出身的。不得不说RoR不管技术怎样,还真是把技术演讲的水平推进了个两三年……

最后说说比较值得关注的两个Go语言的进展:

  • Oracle: 这个是一个Google自己做的Go代码的静态分析工具,目前还是原型阶段,但是不久的将来,应该可以提供更强大的代码分析和编辑器辅助功能。
  • Mobile: Google对Go有个野心就是希望Go能够用来做移动开发,目前当然还是半成品,不过预计明年能够支持用Go来编写Android程序,据说长期目标还包括iOS平台的支持。

本文网址:http://blog.perlfect.me/2014/11/17/gothamgo-2014-nov.html

comments powered by Disqus