相信有的同学看到这个标题就猜到我说的是哪个编程语言了,它就是由Google推出的Golang语言,以下是我与Golang的故事。
初识 Golang
我第一次接触 Golang 是在2014年,当时在猎豹工作,换了一个新的项目组,他们正在把基于 Java 写的核心业务用 Golang 重构一遍。
也是借着这个项目的契机,我开始学 Golang 。其实工作之后我一直在用动态语言,而开始用 Golang 这种静态语言之后,给我的编程思想带来了冲击和震撼,不夸张的说,有一种打开了另一扇窗的感觉。
如果你之前写的是 Java,就能一下感受到 Golang 的优越感了,因为 Golang 的语法更简洁、有函数式编程的特性,又不像 Java 做 OOP 那么复杂,Golang 实现 OOP 非常轻量,上手更容易,而且 Golang 非常容易的就能使程序拥有并发能力。
因为实现高并发更轻松,所以可以减少很多人力资源和服务器资源,这也是我们团队使用 Golang 重构的原因。
遗憾的是14年的时候 Golang 的第三方库不太多,所以我们自己写了一些第三方库来用,方便自己用着更顺手。
从 Golang 到区块链
回想起来,我现在能到区块链公司做自己喜欢的工作,也和当年下决心把 Golang 啃下来有很大关系。但是当年,我根本就没想过这些,也没打算把它当一个吃饭的家伙。
我只是觉得一个好的程序员不可能只掌握一门语言,而我每年都会为自己制定一个技术学习计划,当我开始思考什么最值得学,就会想起看 Golang 代码时的那种震撼,既然它能承载那么大的并发,那它的设计方式是很值得我去学习的,即使我需要去花一些时间成本,我也觉得这是值得付出的。
在15年6月的时候,我跳槽到搜狐工作了。在这做的项目规模更大,所以会直接碰到性能上的问题,而动态语言不太容易解决这些问题。于是我们决定,需要快速业务迭代的用 Python 去写,需要高并发的技术服务用 Golang 去写,陆陆续续用 Golang 实现了高并发生成器、推送、长链接服务,还有一部分 API 接口。运行速度更快,也更加节省服务器成本。
这时候我发现,Golang 的生态环境已经更成熟了,标准库和第三方库比以前丰富了很多。不需要再自己重造*,可以直接拿来用了。我们项目中用了文本处理的库、序列化的库、数据库连接的库、高并发 web 框架等等。
这一年,Golang 的社区也开始越来越丰富了,雨痕也开始写 Go 源码解析的学习笔记。雨痕对我的影响很深,也是我敬重的前辈,和他接触多了之后知道,他从 DOS 时期就开始写代码。所以雨痕会把操作系统层面的东西讲解的很深入,如果实践到一定程度了,发现自己掌握的理论不足以支撑自己继续往前走了,那很适合回过头来再深入看底层的这些东西。
把底层知识啃下来之后,我对于程序运行时背后发生的事情都一清二楚。比如我定义了一个变量,调用函数的时候该变量是值传递好还是引用传递好?最后这个值是分配在堆上还是分配在栈上?它是一个什么情况?这些我都了如指掌。
到了2018年,我已经做开发7年了,大公司的工作已经满足不了我的技术热情,于是我受邀加入了一家由明星团队创立的区块链创业公司,站在一个更高的视角去看待技术。
反思:Golang 需要什么样的人才
这几年,使用 Golang 的公司越来越多,BAT、今日头条、小米、京东、七牛云、滴滴打车、小米等等。Golang 在中国的影响力仅次于美国,这是在其他任何一门语言中都没有出现过的事情。
我现在自己也在招人,也和同行交流,大家普遍的一个感觉是:Golang 工程师特别难招。
我觉得最主要的原因是 Golang 的学习门槛比较高,让很多人望而却步。市面上的书籍、视频是不少的,但很多人遇到的问题是,看过了书、看过了视频,在真正写东西的时候,还是发现有一些问题没法解决,如果对 Golang 的 debug 方式不了解、对操作系统不了解的话,出现异常时会摸不到头绪,可能一个知识点就卡在这了,很多人都是在这从入门到放弃的。
所以我现在一般都是自己去培养公司需要的 Golang 人才,潜质不错的人进来之后,让他尝试用 Golang 写东西,加上我在团队里去指导他,让他逐渐成长为合格的 Golang 工程师。
当然,我一个人能带的新人是有限的,很多人也不具备这种成长环境。所以当受邀加入网易微专业的 Golang 课程团队时,我想是不是可以通过这次机会,让 Golang 这门面向未来的语言的学习门槛再降低一点,让更多人可以开始使用 Golang 并从中受益。
我不想做教条难啃的课程,让初学者又痛苦又不知道学了用在哪。所以这次课程的整体风格是更实用的,基础知识部分全程穿插代码实例,实战部分都是我曾经在公司中做过的项目的浓缩版,尽可能的给学习者还原一个在公司中写 Golang 项目的环境,在实践中更深的理解。
原文发布时间为:2018-10-16
本文作者:皓禹
本文来自云栖社区合作伙伴“Golang语言社区”,了解相关信息可以关注“Golang语言社区”。