很早就了解 Go 语言,毕竟是 google 开发的,总归会引起我的兴趣。 刚开始接触是 Go 1.2 左右吧,感觉还是很不完善,就大概了解了它是什么,大概要怎么写,然后就放在一边了。
直到 1.5 才捡起来,写了挺多程序,但是全部都是命令行工具之类,辅助运维使用,以及一些数据转换啊之类可以定义为 tools 的东西。
一直知道 golang 是有 web 框架的,但是从 1.5 捡起来一直就没动过 http 包,我日常也不会去抓人家数据,所以也没做过爬虫类应用,一直就看都没看过 http 包,说实话,一个星期之前我已经用 go 写了过几万行生产环境代码,但是我还不精确的知道怎么用 go 创建 webserver ,毕竟 PHP 是世界上最好的语言你懂的。
然后之前的某一天心血来潮,其实是我的 mac 挂了送修, windows 机器上并没有 php 环境,然后个人维护的非盈利小众软件 /网站系统来了需求,正好想试用 Micro$oft VSCode ,就用 VSCode 装了个 Go 语法,试着用 Go 实现一把。
查阅了 http 包手册,发现跟预想一样的创建 httpserver 如此简单,基本的简易路由功能也带了(用屁股也能知道会有很多第三方开源强大的路由程序但是我没用,想从头体验一把自身的)
然后之前没接触 go-redis ,果断去 gaythub 找找库,大家推荐最多的 redigo ,嗯嗯,下来,一查卧槽这特么就是直接发命令的一个包装,这特么也太麻烦了吧,总不能我的 model 里还得自己创建 REDIS 类 CLI 命令发 CMD 吧,就这种玩意还能最多推荐最多 star ?老外都怎么想的!自己再二次封装出来,图个啥,继续 gaythub 找找找,找到了一个啥名字记不住了包名叫 redis.v3 的还不错,好歹可以直接 redis.Set(),redis.Get()了
然后轻车熟路的写好逻辑,纯手动调试(没办法我只有个 VSCode 有语法提示就不错了),还好自己写的代码质量还可以,总共没几个 BUG 都很快修复都是入门的问题,然后推上线,看到 execute_time 真是内牛满面啊
写 PHP 习惯了 30ms 起步的我,看到单请求处理时间,用纳秒表示的(懒, time 库时间戳高精度默认就是纳秒单位,超级不喜欢 float 喜欢 int 就直接输出了),单请求处理在 60 万到 80 万纳秒之间(服务器是破 PC 丢政府机房的,别吐槽性能),内牛满面啊,这性能,啧啧……我也能写用纳秒表示执行时间的 web application 了……(虽然实际是微秒级,大约 0.6ms 到 0.8ms ,有数据库操作)
然后没事儿去 google 搜一个 html template 高级语法的问题,无意发现一群老外在吐槽 html/template 性能太操蛋了,说什么同页面渲染比 PHP 都慢,纳尼?我怎么没发现。
然后仔细一搜,结合想了一下推过去的都是 interface{},各种 reflection ,估计还真是要慢,可是这也很快了,我都知足了。那找找看看快的什么样吧。
于是找了个自称很快的 go 模板系统,编译成 go 文件的,估计这种是最快的了,先改了三五个页双渲染,一对比, html/template 的执行时间 750000 ,那个很快的, 25000 ,单位纳秒……
然后果断把所有 html/template 都删了,现在 F5 刷着页面,看着那个 25000 的数字,就想笑,然后被旁边人当成精神病有木有!
以后小网站用啥做,真是纠结,要知道 PHP 是世界上最好的语言,没有之一……纠结
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.