为什么我选择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是一个非常简单,简洁,易于学习的语言,其标志是“实用主义”,而不是语法美。 它旨在解决团队环境中的软件工程问题,在这方面,它做得非常好。

猜你喜欢

转载自my.oschina.net/u/3730750/blog/1576307