Wangxiong's Tech

「Stay hungry. Stay foolish.」

嗨,我是王雄 (@Outlier),一名职业PHP开发者,业余Go/Linux爱好者。现居北京,专注金融。我深信,所有的非常,都源于不懈的日常。


这里是我的Jekyll博客,关于Hexo博客,也欢迎前往了解

【Go 语言】积极拥抱Go语言

摘要:写这篇文章的初衷是为了鼓励和鞭策自己积极拥抱Go语言,更是一次我对自己认知的升级和思想的破局开始。工作时间长了,选择一个新技术的时候不像刚开始工作那样,LinuxRedisJavaScriptDocker等统统都学,学完之后才发现每个技术都非常深,想要真正掌握和吃透谈何容易。现在面对这么多新的技术,更加冷静和沉着,会理性的去分析我为什么要做件事情,如果做了我是不是能够坚持下去,我如何做的更好….C位出道的Go语言比起 Java 语言,可能只是一个幼儿园的小朋友,但是我依然相信长江后浪推前浪,浮事新人换旧人。容器、微服务、区块链等新事物的出现,背后都离不开Go语言,顺应时代的发展,我需要将它作为一剂加速剂推动自身的发展。思前想后,冷静分析写下这篇文章后,我决定勇敢踏上这段征程,Go的学习只是一个开始,它不是学习一门语言这么简单,它是我思想转变,认知升级的一次破局。未来已来。要走的路,依然很远。加油,你可以的。 go.jpeg

作为一个四年以上工作经验的PHP,写这篇文章的目的是为了对自己进行第二门语言的扩展,为了这个选择我也做了很多的努力,看大量的分析文章、请教Go同事、听业界最一流的演讲等,因为我深知选择比努力更重要。

1995 年,横空出世的 Java 语言以其颠覆式的特性霸占了企业级软件领域,这一占就是二十多年。二十年后的今天,当跨平台、垃圾回收、面向对象等不在是什么新鲜词的时候,新的语言层出不穷,ScalaPythonLispGo都有自己擅长和颠覆的领域。正所谓长江后浪推前浪,浮事新人换旧人。那些不断积累沉淀的人和事总会推动旧的人和事的发展,那些有一定资历的新人新事胜过旧人旧事 。

Java凭借顽强的生命力和在软件领域强悍的霸主地位,我相信在未来是不会没落的,我也希望它的发展越来越好,继续推动整个领域的前进。但是整个社会的前进,的确需要允许新事物的出现,就像一个企业需要源源不断的注入新的血液,才会给企业长远的发展带来动力和希望。

Go 语言支持多种编程范式、提供给力的程序构建和发布工具,以及在并发编程方面的极度简化。我认为它这不仅仅只是一门新的语言,我更愿意相信它是一次革新。正因为Java语言发展二十多年经历的太多,在很多方面很难改变:编写代码冗长、侵入式的接口实现声明和类继承声明、复杂的匿名内部类,以及困难重重的线程间协调和调度,我相信如果不是考虑性能瓶颈,我依然相信PHP是世界上最好的语言。

然而恰恰就是这样的时间才能诞生出Go这样的新语言,它把对内核线程的使用和调度操作都内置到其运行时系统中,它的 Goroutine与内核线程之间 M:N 的关系,让我们可以使用成千上万个 Goroutine 去执行并发代码块而仅仅耗费极少的内核线程。(Java 线程与内核线程之间关系是 1:1 )。GO的基因天生就是为了支持并发,Goroutinechannel 使得编写高并发的服务端软件变得相当容易,很多情况下完全不需要考虑锁机制以及由此带来的各种问题。

对于一个研发团队来说,项目成败的关键因素是:成本、质量和时间。Go的一系列特点,导致使它既容易上手,又易于维护。一个初中级工程师使用GO语言,就能轻松写出高并发高负载生产级别的代码,而且质量相当有保证。而同样的工程,如果用C++java等语言,则需要至少3-5年经验的工程师来完成,同时质量还是要让人担心。对于成长型或创业团队来说,使用GO语言,可以让大量初中级工程师承担主要开发工作,还能保证相当优秀的结果,从资金成本和时间成本控制的角度,我想这是选择Go语言的理由之一。

还有一个能让我去学习Go的理由,它是区块链主流开发语言。是的,我也很疑惑为什么会是Go而不是Java。很多基于稳定区块链的DAppstools都是用的Go语言,你所需要的某个功能,很轻松就能找到一个相对应的库。Go是编译型的,所以直接由操作系统执行,这让我们可以更自如地实现像以太坊沙盒一样的技术。而如果是Java,因为它本身的运行载体JVM就是一个虚拟机,要再在上面做一个沙盒,实质是更高一层的抽象,会浪费计算机资源。

为什么Go语言能成为区块链主流开发语言呢?

因为区块链系统开发涉及到算力及应用,这些C++Java语言自然可以解决,但是繁琐的开发成本过高,用其他上层语言,如JavaPythonNodejs等虽然能降低开发成本,但是性能及区块链的算力又跟不上,所以很多企业在开发区块链技术的时候,就会选择开发成本低并且开发性能客观的Go语言作为首选语言。

随着大数据和云计算时代背景下的高并发、分布式应用场景越来越刚需,未来服务端发展的潮流必然是容器化、分布式、微服务化等,这个时候必须有新的语言来适应未来的发展。

容器化:

所有今天在使用的容器软件都是 Go语言 写的,不是 99%,也不是 95%-100%。Go语言绝对是容器领域的霸主,大家所熟知的DockerKubernetsK8S)就是使用Go语言开发的。

分布式:

分布式最好的应用就是以太坊(Ethereum),它是一个开源的有智能合约功能的公共区块链平台,以太坊上的分布式应用程序不会停机,也不能被关掉。

微服务:

微服务的应用不得不提到今日头条,之前今日头条主要编程语言是 Python 以及部分 C++。随着业务和流量的快速增长,服务端的压力越来越大,随之而来问题频出。Python 的解释性语言特性以及其落后的多进程服务模型受到了巨大的挑战,当时的服务端架构是一个典型的单体架构,耦合严重,部分独立功能也急需从单体架构中拆出来。而现在今日头条当前后端服务超过80%的流量是跑在 Go 构建的服务上。微服务数量超过100个,高峰 QPS 超过700万,日处理请求量超过3000亿,是业内最大规模的Go 应用。

在比特币领域,不管你听到过什么,比特币都还没有死掉。比特币整个生态系统的高性能和高安全的保证需求,它们默契的共同点是使用Go语言。

根据Go语言为什么能成为区块链主流开发语言?,区块链广泛的应用领域有金融领域、司法领域、行政领域、人事领域、商业领域、人工智能。这些领域的痛点在未来我想是必然需要去解决的,毕竟人类的发展始终是不断向前的过程。

简单总结下,用以更好的鞭策自己去专注Go的领域:

① 几乎所有新的、有趣的东西都是用 Go语言写的,包括容器、微服务、区块链。 ② Go 语言既拥有编译型编程语言固有的高运行效率,又具有解释型编程语言常有的高开发效率。 ③ 保持简单、面向契约和利于协作是 Go 语言最突出的设计哲学。 ④ 学会顺应时代的发展,站在未来十年去思考,Go或许就是未来的云计算语言。 ⑤ 重要的不是简单学习Go这门语言,而是积极拥抱新事物,新思想,从中收获更多的思想。

随着互联网的快速发展,PHP由于开发速度快的特性依然会徘徊和游离在互联网的边缘,但未来仍然是前后端分离、模块化、高度服务化等。这段时间,我认真的比较过Java语言和Python语言,也通过不断的学习和请教,我最终还是转向GoPHPGo同属于C语言系,加上这些年实际工作开发经验,对于我来说其实是挺完美的选择。我希望未来的我不断专研PHP,朝着精通Go的方向脚踏实地一步一个脚印的走。

很多时候选择比努力更重要,方向选对了才能事半功倍。我不知道这次选择是否正确,但是目前的时间节点我认为是正确,至于未来是否正确,就交给时间来检验。

未来已来。要走的路,依然很远。加油,你可以的。

参考

Go语言为什么能成为区块链主流开发语言?

最近

【区块链】积极拥抱区块链

摘要:接触区块链其实已经很长时间了,但一直没有认真主动思考和拥抱过这个新的技术,也没有静下心来分析和研究过它。我想如果对区块链的认识一直停留在比特币上,我将很快被这场推到重建的过程淹没,也会很快被这滚滚的车轮碾压的粉身碎骨。区块链技术不同于大数据和人工智能,如果说大数据和人工智能是生产力的变革,那么区块链一定是生产关系的变革,它会带来颠覆式的革命和改变,它将重新构建这个世界的生产方式、消费方式、组织方式和分配方式。本文主要介绍了什么是区块链?区块链和比特币的关系?区块链的应用有哪些?目前落...…

区块链继续阅读
更早

【Linux 系统】命令大全总结(一)

摘要:开发过程中经常会使用相关的Linux命令,但一直没有静下心来好好分析和理解每个命令,为了能提升和拓展自身Linux知识,需要对Linux系统知识进行不断的总结。本篇文章主要例举了top 命令、netstat命令和ps命令,除了对相关命令的使用介绍,还重点对相关选项也进行说明,从而更好的理解命令中每个参数的意义。top作用:显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等。英文:The top program provides a dynamic real...…

Linux继续阅读