写了七年移动端,我开始学 Go

去年年底提了内部转岗,从 iOS 组转到基础架构组,主要语言是 Go。今年三月正式过过去了。趁记忆新鲜,写写一个纯客户端背景的人学 Go 的真实体验,给想转的后端朋友一点参考。 语法层面:三天就敢写,三个月才敢合并。 Go 的语法是出了名的简单,关键字二十几个,我有 OC 和 Swift 的底子,看完 tour 一天就能上手写。但敢写和敢上线是两回事——前两个月我写的代码被 mentor 挑出的问题比写出来的功能还多:channel 用完不关、err 一路往上传但没人真正处理、map 并发读写直接 panic 上线。 客户端背景带来的三个思维定势: 总想找"主线程"。 客户端开发里 UI 更新必须在主线程,这个惯性让我一开始畏手畏脚。后端的世界里没有这个概念,goroutine 随便开,要担心的是别的东西。 不习惯显式的 err。 客户端习惯了异常和回调,if err != nil 的样板代码看得我密集恐惧症都犯了。后来才理解这是设计取舍:错误就是返回值的一部分,不该被藏起来。 低估了部署环境。 客户端最多适配几个 OS 版本,后端要面对的是内存、连接数、磁盘 IO,这些我以前从没操心过的东西,现在都是日常。 学习方法上最有效的一件事:mentor 让我先别看资料,直接读公司里一个成熟服务的源码,遇到不懂的再回头查。比从书上一章章啃快多了,而且读到的是"生产级的 Go"而不是"教科书式的 Go"。 转岗三个月,最大的感受是:客户端转后端,语法是最不重要的部分,真正要补的是对分布式系统的直觉。这条路还长,慢慢来。

2021-03-18 · 芮靖安