Gopher China 2021 讲师专访 — 曹春晖
最初如何与go结识的?在此之前,有无接触过其他语言?谈谈他们的优缺点。
在创业公司工作的时候,看到一个信息检索模块是 Go 写的,当时主要写 PHP,也稍微写过一点 C,被 Go 简单直白的语法和高效的并发编程震撼到了。后来跳槽到滴滴就找机会慢慢从 PHP 转 Go 了。刚毕业的时候其实是从 C 开始写的,被 void * 和 callback hell 折磨得死去活来,就投向了 PHP 的怀抱,结果发现 PHP 在大公司有很多大项目,几十万行代码,一样非常难维护,那些几千行代码的接口连顺畅地读下来都很难,改起来同样也很心虚。转了 Go 以后,基本没这种烦恼了,几乎所有的项目读代码都很轻松,也很开心。
Go 语言中最看好哪种特性,谈一谈理由以及你希望它改进的方面
泛型,找再多不需要泛型的理由,你还是无法在没有泛型的前提下既保证代码重复少,又能做到类型安全。泛型到位之后,至少大家写一些复杂的数据结构库能轻松很多,以前的这些库是复制粘贴断言漫天飞的。希望的改进:个人现在最希望改进的是 if err != nil。。造成了太多的代码重复,但是也不喜欢官方之前那个 try 方案,像某语言那样的问号操作符不就挺好的。要是能支持注解的话,做语言本身的扩展会方便很多(这一条感觉官方应该不太会考虑)
Go 语言对大厂和创业公司来说分别有什么优越性?
大厂:对延迟敏感的业务(如高频交易、广告)是少数,Go 对于 80% 的业务是适用的。大厂的单模块代码量都非常非常多(很多都 10w 行起了),相比 PHP 和 Python,这种规模的项目用 Go 写,就是好维护。当前使用 Java 的公司在上云后碰到了很多水土不服的问题,为了解决这些问题又需要付出更多技术上的努力(再说下去这段就不能播了)。用 Go 上云还是比较省心的。
创业公司:买公有云是按用量算钱的,用的资源少就是省钱。就是这么现实。
Go有没有帮助解决公司的实际问题?
Go 在工程化上做了很多努力
0. 研发效率不好说,大家都有一些常见的代码生成工具的话,其实差不多,但强类型语言,在项目中后期维护阶段,肯定比那些 array 满天飞的强
1. 官方直接把 parser 对用户开放,做 linter 不要太方便,工程效率部门直接将 golangci-lint 拿到公司内再针对业务场景做一些定制的 linter 就可以用起来了。
2. 运维不用再考虑我给哪个业务用 PHP x.y 版本的问题了
3. 印象中某公司说从 PHP 迁移到 Go,能节省至少一半服务器吧(这句是传说,我没验证过,各位 PHP fan 不要生气
对众多大厂转Go提一些建议吧,在选型上Go语言适用什么场景,不适用什么场景?
延迟敏感(广告、高频交易)类的场景用 Go 不合适,集中式的并发极高(几 w QPS)的网关系统用 Go 不合适,大数据场景(已经有现成的 Java/Scala SDK,Go 什么库都没有的那种)不适用。虽然一般会讲 go 的 stw 已经控制在个位数毫秒以内了,但实际请求的延迟不只受 stw 影响,所以在 POC 阶段也应该自己做一些压测和数据验证。除了上面讲的,80% 的其它场景问题不大。
谈一谈 Go 的未来,将在哪些领域有更深的应用
Go 现在其实已经是后端服务、分布式基础组件、运维相关领域的主流语言了。个人倾向上希望能在泛型出现后能在数据领域(如实时计算)上稍微有一些拓展,但感觉可能比较难。
介绍下本次分享的议题吧
这次分享是 Go1.14 的信号式抢占,之前看了作者在 GopherCon 上的分享,只是介绍了一些概念,相信完全没有满足大家的好奇心,这次我们就来详细看看这个东西到底是怎么实现的。
分享一下如何快速掌握一门新的编程语言,分享一些经验给新gopher吧。学习go的最佳实践是什么? 推荐一些书吧!
要多动手,多抄代码。比如看 《The Go Programming Language》,能把书上所有的例子都抄明白,那就已经入门了。入门以后,尽量结合工作多写项目。还是从实践中学习最靠谱。要是你对 cgo 啊,汇编什么的感兴趣,欢迎买柴老板和我合著的《Go 语言高级编程》呀。其它的书,就买最畅销的就完事了!
你是第几次参加GopherChina,对GopherChina大会有何期待?
应该是第三还是第四次了,希望以后 GopherChina 能一直保持技术和应用两类主题并重,不要变成架构师大会(笑