游戏go(go手游)


编程语言的宫殿上,类c语言和类lisp语言就像两个风格迥异的阵营,各自都有自己优秀的代言人,但go语言在其中既不显眼,又不优雅,真的很普通(天天写go代码的人最懂它的槽点)。

前两天几个同事饭后遛弯就聊起来为什么这么烂的go语言却有越来越多的公司用它?为什么它成了这条街上最靓的仔?

已经知道的几个例子:

  1. 滴滴起步的时候很多代码都是php写的,后来为了稳定性和性能,逐步替换成了go语言;
  2. 知乎一开始用python构建了整个系统,但后来全部使用go语言做了重构,并且声称这一技术改造提升了系统的性能和稳定性;
  3. 我司(字节跳动)也大规模使用了go语言,公司内部的绝大部分平台天然支持了go语言,基于go语言公司内部孵化出了应用面极广的http和rpc框架;
  4. 阿里云的核心是以C++开发的飞天系统(Apsara),但从2015年起,在不少团队就逐步引入了go语言作为系统的补充,甚至某些核心模块也以go语言为主进行开发。


就在不久前的几年,甚至现在也是,后端编程语言排行榜上python和Java才是最受欢迎的,可越来越多的岗位都在招go语言开发者,原因无非是以下几点:

  1. 上手极其容易,go语言只有25个关键字,相比之下Java的关键字数量“高达”48个,更多的关键字意味着语言的feature更多,掌握起来更难,简单的语言便于企业招人,降低门槛;
  2. go语言是一门静态语言,在编译期可以保证语法正确性,相比python来说这是一个巨大的优势,我就曾经写过一个线上数据统计脚本,上线之后发现数据误差很大,查看日志才发现是一个if条件测试的时候没走进去,在线上才触发这个语法错误,没办法只能回滚,要是能在编译阶段发现就不必费这个劲;
  3. go语言没有虚拟机,性能更好,虽然虚拟机的横空出世提供了一次编译处处运行的巨大优势,但毕竟多了一层处理,会消耗更多的内存和CPU,资源消耗上就不够友好,更何况202x年代,很多程序也并不需要这种价格的可移植性;
  4. 最近这些年云原生概念越来越普及,为了能最大限度的在k8s这样的平台上部署服务,且能在最短时间内拉起服务,在空闲时尽可能节省内存资源,相比Java,go语言兼职完美,用过Java的人都知道,JVM是吃内存大户,可以说是你有多少我就能吃多少,启动也慢,而go语言启动快,吃内存少,非常适合容器化之后快速拉起
  5. go语言提供了非常易用的并发机制——协程(gorountine),这也是go语言核心竞争力,非常轻量的执行流,搭配channel这样的同步机制,可以非常简单的实现各种之前大段代码才能完成的复杂操作;
  6. go语言虽然没有虚拟机,但提供了自动内存回收机制,无需像C++一样自己管理内存(但go语言有指针!)
  7. go语言有docker、k8s这样子的杀手级应用背书,更背靠着Google这样的亲爹,有着强大的生命力和可能性!

还有一些就不多说了,比如go里面的interface,就是一个不能说很牛逼,但非常有意思的设计……

当然,go语言也有很明显的缺点,包括但不限于:

  1. 没有像spring boot或者flask这样很优秀的框架,搭建复杂应用系统很费劲;
  2. error处理机制很丑陋,很容易写出来满屏 if err != nil 的代码;
  3. 内置数据结构初始化没有合理的size,一律默认为0,如果不是熟手很容易写出低性能代码;
  4. 没有泛型,必须定义出诸如MaxInt64、MaxUint64、MaxInt32、MaxUint32这样的丑陋代码,当然go 1.18之后终于有泛型了

槽点真不少,平时写代码都快麻木了,哈哈哈



免责声明
    以上文章转载自互联网,文章内容仅供参考,不构成建议,也不代表百科学社赞同其观点。如有侵权请联系755934052@qq.com,提供原文链接地址以及资料原创证明,本站将会立即删除

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请通知我们,一经查实,本站将立刻删除。