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, 这个是轻易地从一个函数返回一个指针到局部变量:

  

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

  

3, 基于对象编程:

  

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

内容来源:博客园

原文来源:Medium

作者:Naqvi

我为什么用GO语言来做区块链?相关推荐

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

    作者:思想的苇草 在区块链公链的开发圈子里,我们找到了一些流行的编程语言,有C++.Golang.Python和最近新起的Rust等等. 我们稍微对比较有名的项目采用的编程语言做个统计,如下图: 老一 ...

  2. 使用Java语言从零开始创建区块链

    使用Java语言从零开始创建区块链 2018年04月01日 17:08:12 大侠区块链 阅读数:1312 标签: java区块链java区块链 更多 个人分类: 区块链 Java区块链开发与交流群: ...

  3. 链上人才专访:愿做区块链行业基石 | ArcBlock 媒体

    媒体: 币诚时代 日期: 2019 年 7 月 13 日 第 14 期"链上人才"节目请来了一位区块链公关领域的嘉宾:ArcBlock 公关副总裁陈俊.作为曾在传统媒体从业超过 1 ...

  4. 马云:蚂蚁金服这样做区块链!

    马云:蚂蚁金服这样做区块链! 区块链技术不是泡沫,但比特币却有可能是泡沫,区块链只是一个解决方案.并不是每个企业都可以从事区块链技术,但是阿里巴巴必须要有区块链技术. - - 马云 事实上,马云确实做 ...

  5. 获得1.5亿区块链投资后,矩阵元怎么做区块链?

    2017年7月,区块链基础设施技术服务商矩阵元与微众银行.万向区块链联合开发的区块链底层平台BCOS(BlockChain OpenSource)实现了完全开源. 再接再厉,近日矩阵元发布了四大围绕区 ...

  6. C 语言实现简易区块链

    C 语言实现简易区块链 总结:C 语言真不是我这种菜鸡所能驾驭的- 无奈哈希函数太麻烦,就采用 base64 替代下哈希函数吧,其他符合区块链理论 #include <stdio.h> # ...

  7. 《为什么99%的人不适合做区块链投资》

    哈喽,我是区块链365的松哥,区块链365,天天见:今天我们要分享的话题是<为什么99%的人不适合做区块链投资>. 我总结下来,理由有三个:第一.金融投资市场竞争异常惨烈. 我个人感觉做投 ...

  8. 连快播王欣都要做区块链,蚂蚁金服为什么不碰ICO?

    2月7日,快播CEO王欣出狱,在与58同城CEO姚劲波.YY董事长李学凌.小鹏汽车创始人何小鹏等昔日好友相谈甚欢后,王欣透露接下来要从区块链再出发,这个决定让许多人意外,王欣要追热点,以至于宅男们纷纷 ...

  9. Block VC陈九:做区块链行业的“寿星”而不是“明星”

    陈九,陈九金服创始人兼CEO,Block VC创始合伙人.大学时期开始创业,后在证券行业工作.2013年时陈九接触到比特币,自此开始关注区块链.2016年,陈九加入Block VC,担任创始合伙人一职 ...

最新文章

  1. 安装 Python MySQL 驱动(mysql-connector-python、MySQL-python)
  2. mysql查询表的数据大小
  3. 为何红黄蓝一边在被做空,一边在逆势上涨?
  4. dropout比率最好的设置为0.5,因为随机生成的网络结构最多
  5. 三个实例演示 Java Thread Dump 日志分析
  6. java 脚手架_肝了一个半月的 Java 项目快速开发脚手架:Chewing
  7. [译]时间自动机:语义,算法和工具
  8. 修改XMAPP中MYSQL的字符编码
  9. Python 用Django创建自己的博客(2)
  10. oracle 测试sql执行时间_从 TPCH 测试学习性能优化技巧
  11. android Log工具框架,LogUtils让你摆脱TAG的魔爪
  12. koa2后端和php后端,vue+koa2+mongo前后端分离restful,配置和部署到云
  13. Java实现基础坦克大战【含源码】
  14. C# 使用 itextsharp
  15. KNN实现手写字体的识别
  16. 数据可视化平台-智慧安防可视化管理系统-解决楼宇监控管理难题
  17. C语言既有高级语言又有低级语言的特点,但为什么它不是低级语言呢?
  18. 求两个数的最小公倍数; 两种方法
  19. python读json文件json.decoder.JSONDecodeError终极解决大法
  20. springboot整合springsecurity安全框架(后端spring_security模块代码可直接使用,根据需求自定义修改)

热门文章

  1. python人脸识别库_基于facenet的实时人脸识别系统
  2. html贪吃蛇怎么加蛇尾,贪吃蛇制作移动+pc
  3. nbear分页 效率低_为什么大家都说“SELECT *”效率低?
  4. React Profiler API
  5. android串口service,Android串口操作库:EZ-SerialPort
  6. java dao修改语句_一个通用的DAO模型实现增删改查
  7. crbug/1173575, non-JS module files deprecated.
  8. CSS动画效果构成分析
  9. php 每日一句名人名言,每日一句人生格言
  10. 2019 live tex 发行版_TeX Live 2019安装指南