Gopher China 2021 讲师专访 — 曹春晖

CoderPark

共 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 在工程化上做了很多努力:

  1. 研发效率不好说,大家都有一些常见的代码生成工具的话,其实差不多。但强类型语言,在项目中后期维护阶段,肯定比那些 array 满天飞的强。

  2. 官方直接把 parser 对用户开放,做 linter 不要太方便,工程效率部门直接将 golangci-lint 拿到公司内再针对业务场景做一些定制的 linter 就可以用起来了。

  3. 运维不用再考虑我给哪个业务用 PHP x.y 版本的问题了。

  4. 印象中某公司说从 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 能一直保持技术和应用两类主题并重,不要变成架构师大会(笑





浏览 36
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报