原因:1、Go语言具有部署简单、性能优秀、并行执行性能好、良好语言设计、内置大量库、团队牛逼等优势。2、以太坊和超级账本都选择使用Go作为开发语言;这两大超级区块链的影响力很大,不仅在生态中占据了大的坑位,事实上还隐性的制定了区块链的标准。

本教程操作环境:windows10系统、GO 1.11.2、thinkpad t480电脑。

在区块链公链的开发圈子里,我们找到了一些流行的编程语言,有C++、Golang、Python和最近新起的Rust等等。

我们稍微对比较有名的项目采用的编程语言做个统计,如下图:

老一代的公链,比如Bitcoin,Litcoin一般使用C/C++较多(我们看看那个时间,当时Go还没起来呢),新一代的公链比如以太坊,联盟链翘楚超级账本,开始较多使用Go语言,当然我们看到Rust的发展势头也很猛,近两年的很多公链比如波卡,Grin都开始采用Rust语言开发了。

Go语言的优势

部署简单

Go 编译生成的是一个静态可执行文件,除了 glibc 外没有其他外部依赖。这让部署变得异常方便:目标机器上只需要一个基础的系统和必要的管理、监控工具,完全不需要操心应用所需的各种包、库的依赖关系,大大减轻了维护的负担。可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了。

性能优秀

虽然不如 C 和 Java,但通常比原生 Python 应用还是高一个数量级的,适合编写一些瓶颈业务。内存占用也非常省。

并发性&通道

Goroutine 和 channel 使得编写高并发的服务端软件变得相当容易,很多情况下完全不需要考虑锁机制以及由此带来的各种问题。单个 Go 应用也能有效的利用多个 CPU 核,并行执行的性能好。

良好的语言设计

Go 非常简单,且易于学习。从学术的角度讲 Go 语言其实非常平庸,不支持许多高级的语言特性;但从工程的角度讲,Go 的设计是非常优秀的:规范足够简单灵活。正是由于 Go 的简单性,任何的 Python、Elixir、C++、Scala 或者 Java 开发者皆可在一月内组建成一个高效的 Go 团队。

标准库&工具

Go目前已经内置了大量的库,特别是网络库非常强大。更重要的是 Go 自带完善的工具链,大大提高了团队协作的一致性。比如 gofmt 自动排版 Go 代码,很大程度上杜绝了不同人写的代码排版风格不一致的问题。把编辑器配置成在编辑存档的时候自动运行 gofmt,这样在编写代码的时候可以随意摆放位置,存档的时候自动变成正确排版的代码。此外还有 gofix, govet 等非常有用的工具。

团队牛逼

Go语言后面的支持者是Google,语言足够在各种场景下得到检验,同时创始人还是C语言之父,对后续的发展和创新可期。

Go成功的项目

Go语言在云时代得到了比较广泛的应用,特别是Docker和K8s这样的杀手级产品的出现让Go语言在工程界占有一席之地 除此之外Go语言还有非常多的成功运行中的软件:

nsq:bitly开源的消息队列系统,性能非常高,目前他们每天处理数十亿条的消息

packer:用来生成不同平台的镜像文件,例如VM、vbox、AWS等,作者是vagrant的作者

skynet:分布式调度框架 Doozer:分布式同步工具,类似ZooKeeper

Heka:mazila开源的日志处理系统

cbfs:couchbase开源的分布式文件系统

tsuru:开源的PAAS平台,和SAE实现的功能一模一样

groupcache:memcahe作者写的用于Google下载系统的缓存系统

god:类似redis的缓存系统,但是支持分布式和扩展性

gor:网络流量抓包和重放工具


为什么用go语言写区块链