说一下我的学习历程

从 ES5 学到 ES6,后来越来越不满足前端的限制,想学习服务器相关的知识,就学习了 node,服务器相关的知识最基础的服务器搭建提供HTTP服务开始。不同于前端开发,Vue React 提供了一套完整的业务架构,你照着往里填就是了。node 的后台开发最早的 express koa。它们提供的只是基础的HTTP应答。没有完整后端业务架构。所以我去学习了 java 开发。SSM,明白了 controller service dao 层的作用。这个很重要,在我后来写后端服务都是沿用这个模型

当然我并没有深入学习 JAVA,只是跑了基本的服务,主要学习的概念。没有深入的原因是我觉得即使我不学前端了,深入 JAVA 10年我可能也进不了集团或者说得到晋升

掌握后台开发的常识,以及 mysql redis 等相关数据库的使用后,我继续投入到了 node 的学习。因为 ES 本身没有类型,在编写后台服务时极其不方便容易出错我又学习了 typescript,并且前后端统一了。在这个过程中我并没有再执着于语言的学习,而是注重了解 web开发中的各个理念,CAP,SSO,OAUTH,MQ等等。这个阶段语言是不重要的。

直到我遇到了 go

这个语言年轻,2009年出生。性能足够强大,随手写一个服务器就是高性能服务器,node 超冒烟都追不上。而且语法简单。虽然和传统的 OOP 思路不一样,但是对于前端而且是写 TS 的特别容易上手。

node 的 JS 是单线程模型让我没有继续深入的另一个原因。cluster 是多进程模型,即使 v10 出现的 worker,我觉得也只是简化了的开启多进程的方法。单线程意味着没有锁,不用处理许多死锁问题,这是一个 node 的优点。但对于我个人来说,没有锁让我的编程生涯暗淡无光(抖M?)。单线程也意味着只能使用回调的形式(没人会在 web 编程中使用 readFileSync ),虽然 async await 使得异步编程类似同步,但是真的写多了还是觉得不够纯粹。脑子里还是会一直在同步与异步之间切换

go 刚好满足了我想要的一门语言优点 语法简单 多线程(协程) 强类型。在不是很熟悉的情况下使用 go 完成一个 CRUD 应用花了一个周末。iris + gorm。前者是类似 KOA 的 WEB 框架,后者是数据库映射工具。敲业务代码实现起来特别简单,没考虑过死锁的问题,因为框架层面就帮你解决了。而且全部是同步代码,不用再去 await 了

目前比较坑爹的是 go 的包管理(modules 现在还因为 golang 下的库安装不了产生问题)不够好。以及各种开源库存在不靠谱的情况。可能用着用着就 panic 了。不过随着 go2 的出来,有了泛型以及新的错误处理机制,go 的库也会越来越完善

在学习 node 的时候我对自己的要求是熟练掌握各种异步模型,各种 Promise async,各种池链接要求自己能随便写。go 我对自己的要求就是熟练并发模型,熟练锁以及 channel 的各种操作,目前主要的心思也是花在这上面。

个人觉得 go 是未来。在 web 开发领域也会逐步提升份额。现在大部分是用 go 做中间件开发,但是也有大厂用来做 crud 业务了。将来不送外卖了,可能我会试试去做 go 的后台开发