为何我选择Go来构建区块链

https://medium.com/karachain/why-i-am-building-a-blockchain-in-go-6395a60b24dd算法


GoLang已经成为今天开发分散系统的首选语言。 每一个其余组织都在使用它做为核心处理模块,在Web开发中也得到了很大的推进力。 当咱们决定构建卡拉OK时,咱们评估了多种语言,如C,C ++,Java甚至NodeJs。 咱们也试着用一些算法的基准来决定实现Karachain协议的核心语言。 今天,我很高兴地宣布,咱们正在使用Go来达到这个目的。编程

如今构建区块链至关于及时构建操做系统。

咱们专一于构建像区块链平台这样复杂的一些核心问题。 通过近4周的开发和研究,咱们发现了这个惊人的编程语言的美丽如何解决了咱们的问题。小程序

可长期维护的代码

go很简单。 并且,当你在中止以后回到语言时,它的怪癖数量会减小。 此外,还有不多的东西要学习,还有一些作典型的方法 - 这种质量大大下降了开发人员学习曲线的陡峭程度。 这个功能,不管用什么语言,都会吸引大量的开发者。 这些缘由也促进了错误发生的机会。 考虑到每个bug在任何开发中的巨大延迟,这最终使得整个开发过程变得更简单和更快。网络

越多的代码添加到项目中,越难维护。 因为区块链可能须要数千行代码,所以咱们须要一种可使这样一个巨大项目的维护很是容易的语言。闭包

易于开发人员掌握

当咱们开始的时候,咱们有一个由20名优秀的开发人员组成的团队,其中大部分来自JavaScript,Java和Python等编程语言。 有些仍是C系统工程师。 咱们须要使用一种通用的编程语言,说服他们学习Go很是容易,可是培训他们变得富有成效Go的开发人员在一个月以内很容易就能够实现,我不肯定咱们是否可以很快用其余语言实现这一目标。并发

速度和效率

与Python不一样,Go不是一种解释型语言 - 它是一种编译语言。 这大大减小了在解释型语言中发生的“即时”错误的开销。 这与C语言相似,首先编译代码,显示要求解析的错误,而后才运行代码; 可是它比C更高级的语言,比JavaScript和Python更有效率。 区块链须要很是高效,主要是因为密码计算和大量的数据传播以及存储在网络中。异步

它是为分布式系统而构建的

这已经被已经使用Go构建的工具和软件证实了。 Docker,微服务的容器也是使用Golang构建的。 咱们已经看到,与PHP相比,使用Go构建的微服务可轻松扩展至数百万个请求。编程语言

协程

并发性是可以异步或并行运行多个程序或程序的多个部分,从而提升吞吐量。 一般,线程用于实现诸如Java等语言的并发。 在Go中,使用Goroutines的方法。 Goroutines是能够与其余功能并行运行的方法或函数。 固然,Goroutine在RAM中占用大约4千字节的空间。 相反,一个线程在RAM中占用大约1024千字节 。 所以,Goroutines比其余语言的线程占用的空间减小了250倍,这使得能够同时运行愈来愈多的Goroutines。 如下是Go中与Java相比处理线程差别的解释:分布式

在Java中,对象是在工做单元之间共享的,为了访问这部分数据,一个工做单元必须先得到一个锁。 在Go中,频道在工做单元之间共享,而频道基本上是FIFO - 工做单元能够读取或写入channel。
坚持“不要经过共享内存来沟通,而是经过沟通共享内存”的口号。

并且,区块链对于并行操做具备很是重要的意义,在这个特殊的功能中很是方便。 此外,并行运行大量功能的能力容许使用Go编写的程序在分布式系统上运行,这是区块链技术的主要需求。 Go采用并发的一些深入的例子是Docker,MongoDB,Netflix,Uber等 - 并发性和可以以分布式方式运行的公司是最重要的。函数

区块链世界的每一个人都在使用它

如今大部分稳定的基于区块链的DApps和工具都是使用Golang构建的。 很容易找到所需的库和包 。 Go是一种编译语言,所以它能够直接在OS上运行。 这可让咱们以更好的方式构建像EVM(以太坊虚拟机)这样的技术。 与此相反,咱们使用运行在本身的JVM上的Java,而后运行在OS之上。 所以,为本身在另外一台虚拟机上运行的智能合约构建虚拟机引入了彻底没必要要的抽象级别。 这也大大下降了性能。 Go提供了脚本语言的感受,而且启动时间很短,所以对于小程序很是有用。 Go的每秒查询(QPS)比Java好得多。 所以,Go能够用来构建处理大量请求的系统。

关于Go的一些漂亮的代码示例

  • 下面是如何简单地从函数返回一个指向局部变量的指针:
  • 你能够在函数内部编写函数,你能够像函数式语言那样返回函数,而它周围的局部变量能够做为闭包中的变量:
  • 面向对象
    go是一个很是简单,简洁,易于学习的语言,其标志是“实用主义”,而不是语法美。 它旨在解决团队环境中的软件工程问题,在这方面,它作得很是好。
相关文章
相关标签/搜索