文档章节

我为什么用GO语言来做区块链?

HiBlock
 HiBlock
发布于 09/23 23:11
字数 1596
阅读 61
收藏 6
Go

image

Go语言现在常常被用来做去中心化系统(decentralised system)。其他类型的公司也都把Go用在产品的核心模块中,并且它在网站开发中也占据了一席之地。

我们在决定做Karachain的时候,考量(benchmark)了C,C++, Java, 甚至NodeJs,我们也试着用一些算法来作为考量标准。而现在,我表示我们正在用Go来实现此目标,并且感觉不错。

啊,现在建造一个区块链,恰如当时建造一个操作系统!

我们在建造像区块链平台这样复杂的东西时,把注意力放在了那些核心问题上。经过差不多4周的开发与探索,我们才发现这门奇妙的语言是如何优雅地解答了我们的难题。

1

长期项目中的易维护代码

Go语言很简单。并且每次你中途休息(cessation)之后回到代码中时,它没有那么多诡异的错误(quirk)来浪费你的时间。再加上,它所需要的学习量很少,因为它的语法比较大众,开发者的学习曲线很平缓,这样的特性本身就很吸引开发者。这也导致(facilitate)出现Bug的几率很低。所以整个开发过程显得如此简单快速。

一般来讲,代码量越多,项目越难维护。而一个区块链系统需要的代码可达几千行,所以我们需要一门语言,来让维护变得轻松。

2

轻松变成Go语言大师

我们初期有20位出色的工程师,大多来自JavaScript, Java, 和Python,也有的是系统工程师,善使C器。

我们自然需要同一个语言来协同工作。说服(convince)他们来学习Go非常容易,但让他们一个月速成Go语言工程师,却也是挺简单。。。我倒不确定选择其他语言是否也能有此神速。

3

速度与效率

不似Python, Go不是一种解释型语言——它是编译型的。这大大地(drastically)减少了在运行中突然出现的Bug。这一点有点像C语言,代码先被编译,错误会在编译时出现并得到处理,然后才能运行;但是,它比C更高级,比JavaScript和Python更具生产力。

一个区块链非常需要高效性,鉴于其使用的是加密(cryptographic)算法,鉴于它把大量数据传输(propagate)于网络,并存储于网络。

4

为分布式系统而生

这一点,在那些用Golang打造的工具和软件中显而易见。Docker,作为一种微服务的容器,也是用Golang打造。

我们已经看到了我们能用Golang打造的微服务轻松驾驭百万数量的请求。

5

Goroutines

并发(Concurrency)是让几个程序或者一个程序的几个部分同时间运行,或者说并行,以提升计算机的吞吐量(throughput)。通常,在Java或其他一些语言中,通过线程(threads)来实现并发。而Go则用的是“Goroutines”方法。Goroutines就是说一些函数,它们可以同另外的一些函数同时被执行。一个Goroutine在内存中占用大概4kb,而一个线程需要大约1024kb的内存。所以,Goroutines同其他语言所使用的线程比起来,小了250倍,这使得它也可以同时执行不断增加的其他Goroutines。

以下是Go语言在处理线程方面与Java的不同之处:

在Java中,对象(object)在工作单元间共享,其中某一单元为了访问到这个数据,必须先得到它的对象锁。在Golang中,工作单元间共享一种被称为信道(channel)的东西,一个信道基本上就是一个先入先出通道(FIFO pipe)——工作单元可以向信道发起数据读写。

Go语言遵循着它的准则——“不要通过内存共享进行通讯,应当通过通讯来共享内存”(not to communicate by sharing memory, instead share memory by communicating)。

并行操作对于区块链是有着特殊意义的。同时跑大量函数——这一巧妙而天然的特性使得Go程序灵活地运行于分布式系统,这正是区块链的主要需求。不过这一特性早已被发掘,有Docker,MongoDB,Netflix,Uber等等等,他们的产品功能也都主要依赖于高并发。

6

区块链领域的所有人都用它

很多基于稳定区块链的DApps和tools都是用的Go语言。你所需要的某个功能,很轻松就能找到一个相对应的库。

Go是编译型的,所以直接由操作系统执行。这让我们可以更自如地实现像以太坊沙盒(EVM (Ethereum Virtual Machine))一样的技术。而如果是Java,因为它本身的运行载体JVM就是一个虚拟机,要再在上面做一个沙盒,实质是更高一层的抽象,这完全没有必要,会浪费计算机资源。

当然,Go的使用体验像是脚本语言,学习成本很低,所以非常适合小型项目。而在QPS(The Queries per second)上,比起Java好太多,所以又适合用来构建高请求量的服务。

一些美妙的Go代码片段

1, 这个是轻易地从一个函数返回一个指针到局部变量:

  image

2, 你可以在函数内部再定义另外的函数并可以用函数作为返回值,其中的局部变量会被当做闭包内变量:

  image

3, 基于对象编程:

  image

Go语言是简单而易学的,是简洁而易懂的。“实用主义”是它的标签,性能高于观感。它被设计用于团队型工作,并且,效果十分出色。

内容来源:博客园

原文来源:Medium

作者:Naqvi

image

本文转载自:https://mp.weixin.qq.com/s?__biz=MzA5NDAxNzIzNg==&mid=2450006088&idx=1&sn=182e6e32e5c326a0acb76ce...

共有 人打赏支持
HiBlock
粉丝 13
博文 360
码字总数 481361
作品 0
私信 提问
BTA | 杨建新:打造区块链核心性能的架构是什么?

作为时下最热门的行业话题,区块链以其颠覆性的技术理念,正在对各个行业施以影响,吸引了全球技术圈、投资者、创业者的关注。为了深入理解区块链及其背后的技术本质,近日,区块链技术及应用...

雪花又一年
04/19
0
0
区块链对互联网行业有什么样的影响

每天5分钟,学点区块链 ! 说到区块链对互联网行业的影响,我们可以先重温回顾一下我们之前讲的区块链知识,区块链简单来说,就是一套“加密的分布式记账技术”。“加密”是数学概念,“分布...

小七来讲区块链
08/20
0
0
区块链人才成抢手货,新来者如何快速上车?

专栏 | 九章算法 网址 | www.jiuzhang.com 说起“区块链”,大多数人会立即想到“比特币”。然而,“区块链”和“比特币”实质上存在着巨大差异。比特币只是区块链技术的初始应用,无论比特币...

九章算法
09/22
0
0
【区块链】以太坊区块链技术初探

[国内首家]以太坊区块链实战教学:http://edu.csdn.net/course/detail/6455 LinApex个人简介 奋斗在区块链网络在数字货币交易平台,底层框架设计,区块链钱包,区块链解决方案一线,做过人工...

linapex
2017/10/20
0
16
(转)什么是区块链,一文看懂区块链架构设计(附知识图谱)

前言 区块链作为一种架构设计的实现,与基础语言或平台等差别较大。区块链是加密货币背后的技术,是当下与VR虚拟现实等比肩的热门技术之一,本身不是新技术,类似Ajax,可以说它是一种技术架...

雪花又一年
04/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android :报错Your project path contains non-ASCII characters.

报错内容如下 Your project path contains non-ASCII characters. This will most likely cause the build to fail on Windows. Please move your project to a different directory. See ht......

lanyu96
7分钟前
0
0
[LintCode] Number of Islands(岛屿个数)

描述 给一个01矩阵,求不同的岛屿的个数。 0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。 样例 在矩阵: [ [1, 1, 0, 0, 0], [0, 1, 0, 0, ...

honeymose
7分钟前
0
0
Nginx平滑添加模块

Nginx已经编译安装并运行了一段时间, 然后某一天, 发现需要用到某个模块但当初没有编译, 这个时候怎么办呢? 卸载重新安装肯定可以的, 如果Nginx版本没有变更的话, 则有一个相对平滑的方法来添...

老菜鸟0217
12分钟前
1
0
spark安装测试

spark安装测试 由于本地已经安装好hadoop相关组件,所以本文是在yarn的基础上对spark进行安装及测试 确保hdfs及yarn成功启动,hadoop版本为2.7.3 安装scala,由于本人安装的spark是2.4.0,对应...

-九天-
25分钟前
3
0
周末看完了《电能计量自动化技术》

整体质量还行,下面分别将心得记录如下: 第一章:发展历程可以看看,现在算是智能电网阶段 2:讲主站系统。以文件进行各模块的交互很值得思考,尤其是批量数据,多团队合作的情况下。另外线...

max佩恩
46分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部