Gopher China 2021 讲师专访 — 曹春晖
共 2212字,需浏览 5分钟
·
2021-06-01 17:31
曹大今年会在 Gopher China 大会上分享 Go 语言的抢占式调度,这也是他第一次作为讲师出现在 Gopher China 的现场。这篇文章是 GoCN 对他做的采访。
采访中曹大风趣幽默、针砭时弊,从他当年的实习经历讲到当下公司使用 Go 的情况再到 Go 的未来,非常之精彩!当然,我们更希望你能到大会现场听曹大的分享。
曹大曾说:
你所要做的是提前做好准备,在那一天到来的时候,在聚光灯下旁征博引,谈笑风生。
如今他就要实现了!
人这一辈子,最重要的是能把路越走越宽。也愿各位长风破浪会有时,直挂云帆济沧海!
最初如何与 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 在工程化上做了很多努力:
研发效率不好说,大家都有一些常见的代码生成工具的话,其实差不多。但强类型语言,在项目中后期维护阶段,肯定比那些 array 满天飞的强。
官方直接把 parser 对用户开放,做 linter 不要太方便,工程效率部门直接将 golangci-lint 拿到公司内再针对业务场景做一些定制的 linter 就可以用起来了。
运维不用再考虑我给哪个业务用 PHP x.y 版本的问题了。
印象中某公司说从 PHP 迁移到 Go,能节省至少一半服务器吧(这句是传说,我没验证过,各位 PHP fan 不要生气)。
对众多大厂转 Go 提一些建议吧,在选型上 Go 适用什么场景,不适用什么场景?
延迟敏感(广告、高频交易)类的场景用 Go 不合适,集中式的并发极高(几 w QPS)的网关系统用 Go 不合适,大数据场景(已经有现成的 Java/Scala SDK,Go 什么库都没有的那种)不适用。虽然一般会讲 Go 的 stw 已经控制在个位数毫秒以内了,但实际请求的延迟不只受 stw 影响,所以在 POC 阶段也应该自己做一些压测和数据验证。除了上面讲的,80% 的其它场景问题不大。
谈一谈 Go 的未来,将在哪些领域有更深的应用?
Go 现在其实已经是后端服务、分布式基础组件、运维相关领域的主流语言了。个人倾向上希望能在泛型出现后能在数据领域(如实时计算)上稍微有一些拓展,但感觉可能比较难。
介绍下本次分享的议题吧
这次分享是 Go 1.14 的信号式抢占,之前看了作者在 GopherCon 上的分享,只是介绍了一些概念,相信完全没有满足大家的好奇心,这次我们就来详细看看这个东西到底是怎么实现的。
分享一下如何快速掌握一门新的编程语言,分享一些经验给新 Gopher吧。学习 Go 的最佳实践是什么?推荐一些书吧!
要多动手,多抄代码。比如看《The Go Programming Language》,能把书上所有的例子都抄明白,那就已经入门了。入门以后,尽量结合工作多写项目,还是从实践中学习最靠谱。要是你对 cgo 啊,汇编什么的感兴趣,欢迎买柴老板和我合著的《Go 语言高级编程》呀。其它的书,就买最畅销的就完事了!
你是第几次参加 GopherChina,对 GopherChina 大会有何期待?
应该是第三还是第四次了,希望以后 GopherChina 能一直保持技术和应用两类主题并重,不要变成架构师大会(笑