目录
Golang 是什么?
Golang 是谷歌 2009 年发布的第二款开源编程语言。
Golang 针对多处理器计算平台的应用程序编程进行了优化,使用 Golang 编译的程序可以媲美 C/C++ 的执行效率,而且实现更加简单,运行更加安全,并且原生支持并行进程。
我们为什么选择 Golang?
我们几位损友曾私下就 “什么是世界上最好的语言” 做出过严肃讨论,现在想想当年的自己还是太年轻。可幸的是,我们勉强达成了共识:最理想的编程语言是「强类型、静态类型」,第二象限就是最接近 “真理” 的维度。想来阿里专情于 Java,Microsoft 专情于 C# 有道理的。
那 Golang 在第几象限?笔者认为 Golang 也应当属第二象限。它是类型安全的强类型,同时又是具有弱类型声明机制的静态类型。这些特性使 Golang 的编译器、IDE 拥有完善的代码分析和理解能力,编译过程就能暴露出大部分潜在的逻辑性错误,适用于大规模团队协作开发复杂庞大的分布式服务器端应用系统,具有简单高效,风格统一,性能突出的最佳实践组合。
注:编程语言类型我们在《Python 笔试集(3):编译/解释?动态/静态?强/弱?Python 是一门怎样的语言》一文中讨论过,这里不再赘述。
Golang 的确能够在某些应用场景中表现出了更简单,更安全,更快速以及更高收益的优势,举一个具体的事例:
Linux 基金会旗下的边缘计算框架 EdgeX Foundry 将开发平台从原本的 Java 迁移至 Golang。这项改变让 EdgeX Foundry California 版本的发布延迟了几个月,但却收获了 EdgeX 容量、启动时间、CPU 和内存使用率的大幅度优化。用 Java 开发的 EdgeX 容量高达 267MB,如果加上启动容器则为 519MB,而改用 Golang 重写后只有 42MB,即便加上启动容器也只有 68MB。内存占用率也从原本的 1302MB 缩减到了 27MB,启动时间从 35 秒缩短到了 1 秒以內。
虽然没能深入考究 EdgeX 是怎么通过 Golang 做到这一点的,但就结果而言实在是令人惊艳。类似例子也不在少数,所以笔者更愿意将 Golang 定位为优秀的服务器后端编程语言。作为 “有追求” 的后端工程师,是的,有追求的我们选择了它。
Golang 是云时代的宠儿!
江湖中一直流传着「Golang 是云时代的 C 语言」的传说。这句话其实不难理解,云计算降低了企业获取多处理器计算平台的门槛,笔者甚至可以大胆的预言不久的将来人人皆可拥有高性能计算资源,这也意味着开发者面向高性能编程会成为常态。这时,你会选择 PHP?Python?Java?还是依旧坚守在 C/C++ 的阵列?
注:对于多处理器计算平台的性能问题,我们曾在《多进程、多线程与多处理器计算平台的性能问题》讨论过,这里也不再赘述。
作为多年云计算从业者,我深刻的感受到 K8s 之于 OpenStack 的冲击,从某个角度来说也可以理解为 Golang 对 Python 的冲击。当然,应用系统能否成功最本质要取决于其是否解决了用户的痛点以及是否能够帮助用户成功。但如果,有两个甚至多个应用系统在解决相同的问题呢?
我发现我花了四年时间锤炼自己用 C 语言构建系统的能力,试图找到一个规范,可以更好的编写软件。结果发现只是对 Go 的模仿。缺乏语言层面的支持,只能是一个拙劣的模仿。
— — — 摘自云风博客
无论何时、无论何地我们都应慎重对待编程语言的选型研讨。编程语言是应用系统的基因,它的影响会覆射到整个系统生态。比如说:社区活跃度,开发者体验,Bugs List,性能,客户亲和度甚至人才市场成本等等等方面。
我为什么从 Python 转向 Golang?
Python 的确是实至名归的 “网红”,从云计算到大数据到人工智能均有斩获一席之地,但就云计算的 OpenStack 而言,整个开发者体验不能算是优良。程序员的代码风格各异难统一,全局互斥锁卡住了多线程的脖子,再多的测试也还是会在生产环境出现问题。除了「简单优雅」这一 Python 的精髓犹在,其余的,还烦请您在评论区多多点拨。
关于上述提到的这些问题,笔者在 Golang 身上看见了曙光。依旧是那句「简单高效,风格统一,性能突出,第二象限属性加持」,还要什么自行车,已然心满意足了。
那 Golang 存在什么问题?
问题肯定是有的,而且只多不少:
没三目运算
没泛型,别说 interface{} 算泛型
没函数重载
没 template
要啥没啥
变量类型说静态不静态,说动态不动态
没有杀手级的框架
写个 web 服务都要难受死
我圆润的滚回 PHP 了
— — — 摘自 v2ex 分享
“是的,我应该振臂高呼 PHP 是最好的语言!”
谁年轻还不会犯点错,它会变好的。这样的非理性感受,也许就是程序员的浪漫主义了。
好了,闲话不再多说。
我们搞了一场 Golang 入门直播
就在今晚(18/08/10)
就在今晚(18/08/10)
就在今晚(18/08/10)
我们承诺全程没有任何防不胜防的广告时间,单纯的爱好驱动技术分享,「硬核」将会是本群的核心精神。技术交流,请您认真一点。
Topic:Golang 硬核技术交流群线上活动第一期之 “Golang 入门分享”
Speaker:李成(萌萌的哥哥),杭州网银科技有限公司云计算研发工程师,主要从事容器方面的研究。
Link:http://www.itdks.com/liveevent/detail/15163
(IT 大咖说,别人都免费给平台了出个镜怎么了?)
扫一扫参加:
最后欢迎各路老司机进群交流!请加管理员微信并回复 Golang。