最近很蛋疼地想试试用 Go 语言写 web app,写着写着就开始想念 Rails 的“无微不至”了:
DB migration: Sorry,Go 里面没有这种工具,没有神奇的 go generate migration
,只好自己写了个 bash 脚本来管理,仿照 Rails 的做法,在数据库里建一个表 schema_migrations
,记录已运行的 migration 的版本号(目前只支持 PostgreSQL),暂时不支持 rollback……
Routing: 官方库 net/http
的 DefaultServeMux
只支持 static URL,还好有第三方的 gorilla/mux,这个库支持 URL 的正则匹配、方法过滤、子域等等,比较接近 Rails 的风格
ORM: 貌似有一些现成的 ORM 库,但是我想试试手写 SQL——前天翻 PostgreSQL 文档并自己试验才弄明白了 SQL 注入的防护方法,算是额外的收获,而这些在 Rails 里面几乎没有接触过(人家都帮你做好了)
前端:Go 写后端服务可以很拉风,但处理前端问题的时候还是要 Ruby 来救场——大家有没有注意过,sass / haml / coffeescript 这些全是 Ruby 写的东西,被迫在项目里加了个 Gemfile,haml 和 coffeescript 可以跳过,但 sass 已经离不开了。顺便试用了下 jammit 这个工具,可以模拟出 asset pipeline 的效果。
现在我写代码时总是想着“Rails 是如何如何做的”,中毒太深了……
Go 我体验最深刻的就是
写错代码当然能写了,但是帮你挡住大部分的工作了,我们现在用到的包,几乎随便升级,如果有问题,就会编译不通过,然后改改就好了,但是 Ruby 哪敢随便升级 Gem 啊,不是找死吗。。系统流程不跑一遍都心突突。
哦,顺便推下https://qortex.net/ 纯 Go 编写,服务器在 EC2,所以国内访问速度一般,但是可以用。 很久没用象现在这样不怎么担心性能问题了,估计顶到出性能问题的时候,我们也该赚些钱了。。出性能问题也是 mongo 先出估计。
go 的 web developing 现在还是野蛮生长阶段,各种框架百家争鸣.. 拼框架显然拼不过几乎一统江湖的 rails. 对此,两者都浸淫不浅的人的结论才比较值有参考价值。个人认为 go 目前就有两点比较不爽。一个是删除一个 slice, 另外是自带的正则支持太弱了。
在用 Go 的时候,去 IRC 上问问题,但是大部分都被人指到 http://golang.org/ref/spec 里面的某一部分去详细读就知道怎么回事了,所以那个 The Go Programming Language Specification 包罗万象,非常重要。