木星链 木星链
Ctrl+D收藏木星链
首页 > BNB > 正文

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

作者:

时间:1900/1/1 0:00:00

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

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

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

Go语言的优势

部署简单

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

江卓尔:我们现在正处于这一波急涨中:莱比特矿池CEO江卓尔发微博称,不少人开始恐慌60日涨幅到100%了,我给一个明确的预言,请各位重视:

1、破前高后,因为上涨空间被打开,预期大量新人因新闻效应而进入,市场信心大幅增强,正常情况下有一波急涨,我们现在正处于这一波急涨中。

2、60日涨幅减少,除了靠下跌,还可以靠横盘震荡,以时间换空间。

3、后面可能有周级别的闪崩,但不会有长时间且深的回调。拿住币(不要做空),不要玩期货(会被闪崩插针爆仓),不要做波段(抄底窗口极其短暂,做波段唯一结果就是做飞)。

4、BTC后面大概率进入 震荡&缓涨 阶段,类似 2017年5月25日~8月5日的2个月盘整。在此期间,由于BTC涨幅趋缓,和新人的逐渐涌入,主流币会开始表演。

5、2017牛市BTC破前高有一个阶段,2017年2月23日首次有效突破前高,然后又回调,到4月17日最后一次突破(之后再没有低于前高),用了2个月,而这次破前高一次性完成,因此时间点计算上会有差异。

6、LTC上一轮3月2日到对BTC汇率最低点0.00275(首次破前高后7天),5月10日到第一轮对BTC汇率最高点0.02189(首次破前高后2个月17天),2个月对BTC汇率暴涨8倍。

假设新人新资金按同样速度入场,则2020年12月16日BTC破前高后2个月17天(2021年3月2日)ETH+BCH+LTC(Paypal四杰),将对BTC有巨大涨幅。

选Paypal四杰,是因为Paypal散户含量最高,Paypal将把全球散户资金集中到 ETH+BCH+LTC 这3个币上。[2021/1/4 16:21:56]

性能优秀

OKEx CEO:我们可能不会看到市场回撤 但请谨慎投资:12月27日消息,播客主持人Peter McCormack发推称,你永远不会再看到比特币低于2.5万美元了。对此OKEx CEO?Jay?Hao转发并表示,我们可能不会看到市场回撤,但更重要的是要有责任感。加密市场不稳定,请谨慎投资。应总是关注平均成本,随着时间的推移建立头寸,而不是全部投入,请谨慎交易。[2020/12/27 16:39:02]

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

并发性&通道

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

良好的语言设计

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

Bobby Ong:我们的责任是确保我们的数据没有偏见:6月29日下午3:30,中币“新基建,新机遇”暨七周年云峰会论坛四顺利在中币热聊群展开。

在分享CMC收购事件带来Coingecko点击量攀升时,Coingecko联合创始人Bobby Ong表示:“社区可以看到我们的优点,因为我们非常非常认真地对待数据的独立性和中立性。作为加密货币数据的主要提供者,全球数百万用户依赖我们的数据做出许多重要决策。我们认为这是我们的责任,以确保我们的数据没有偏见和最准确地反映真实的加密货币市场。”[2020/6/29]

标准库&工具

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

团队牛逼

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

声音 | 赵长鹏回应:不要陷入KYC数据泄漏的恐惧中,我们正在调查中:赵长鹏刚才在推特上回应表示:不要陷入KYC数据泄漏的恐惧中,我们正在调查中,将会及时更新状况。[2019/8/7]

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下载系统的缓存系统

声音 | BB:我们一直专注于技术变革:据 IMEOS 报道,BB在EOS官方电报群里表示,EOSIO作为一种协议使主流的去中心化程序能够达到与Facebook,Uber,Airbnb和其他蓝筹组织等大型技术企业竞争所需的要求。

Block.one现在专注从内部进化。这是一项耗时的任务但是我们正在努力,以尽最大努力展示一种变革,这种变革只有通过EOSIO高性能才能去实现。

这种变革的一部分会吸引更多技术领先者带入我们的团队,但是我们第一轮新支持者已经关闭。后续我们会再宣布这些有名的新增内容。敬请关注。[2018/7/16]

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

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

生态卡位和隐性标准

除了打铁还需自身硬之外,还有些机遇和运势,让区块链选择的了Go语言。我们来看区块链2.0以来最成功的公链和联盟链代表,以太坊和超级账本Fabric,无一例外都选择使用Go作为开发语言,这两大超级区块链的影响力可不是一般项目可以比拟的,不仅在生态中占据了大的坑位,事实上还隐性的制定了区块链的标准,不论是公链中的智能合约,还是联盟链的技术,都绕不开以太坊和Fabric,那么对于一家想要做区块链技术选型的公司来说,最快捷的实现是什么?自然是直接照搬这两个项目的创新,再捷径一点就是直接拿开源代码改,那么自然Go语言就成为后来者的首选,换种语言重新实现一遍难度也不小,而且如果选择一些创新但不是非常成熟的语言还会缺失一些特定库的支持从而导致项目无法开展。

很多人对以太坊的影响力毋庸置疑,但实际上Fabric在企业区块链部署上的影响力更不容小觑:

图表来源《2019年全球企业区块链基准研究报告》

HyperledgerFabric是已部署的企业区块链网络中使用最多的协议框架,超级账本Hyperledger是集成商和软件开发平台最常支持的协议框架,比例达到了53%。而在所有的区块链技术书籍里面,有关超级账本的书籍是卖的最为火爆这个事实也是侧面印证了超级账本Hyperledger的影响力。

比原链在Go语言中的实践

我们在选型编程语言的过程中,考量了C,C++,Java,但C/C++大项目维护难度大,而Java又略显笨重,此时Go语言已经在区块链项目上大放异彩,也逐渐形成技术和人才的一个头部效应,那么顺应潮流进行技术选型自然也会减少初始比原链项目遇到的阻力,当然在逐渐开发过程中,我们也感受到了选用Go语言带来的便利和优势。

Go在区块链上的一个Case

从技术上来说,区块链节点是需要多模块异步协同工作的,所以Go语言并发性和通道就显得非常有优势,我们看下面交易验证的例子:

funcValidateTxs(txs*bc.Tx,block*bc.Block)*ValidateTxResult{

txSize:=len(txs)

//initthegoroutinevalidateworker

varwgsync.WaitGroup

workCh:=make(chan*validateTxWork,txSize)

resultCh:=make(chan*ValidateTxResult,txSize)

closeCh:=make(chanstruct{})

fori:=0;i<=validateWorkerNum&&i<txSize;i++{

wg.Add(1)

govalidateTxWorker(workCh,resultCh,closeCh,&wg)

}

?

//senttheworks

fori,tx:=rangetxs{

workCh<-&validateTxWork{i:i,tx:tx,block:block}

}

?

//collectvalidateresults

results:=make(*ValidateTxResult,txSize)

fori:=0;i<txSize;i++{

result:=<-resultCh

results=result

}

?

close(closeCh)

wg.Wait()

close(workCh)

close(resultCh)

returnresults

}

我们使用Routine+Ch+WaitGroup在30行代码之内,就可以构建一个并发的验证交易的功能,在高配置的服务器的情况下,可以跑出10万以上的TPS。

轻松变成Go语言大师

从人才上来说,比原链核心开发团队的部分成员之前也没有做过Go语言开发,但都能够很快上手,基本在半个月内能够参与核心代码的开发和维护了,这就是语言简单对团队构建带来的好处。

统一的协作

从协作上来说,通过gofmt自动排版Go代码,能够让核心团队成员甚至社区开发者提交的代码风格的差异性降到最小,提升项目的整体质量和可维护性。

小结

Go语言本身的特质和优势为其做好了铺垫,而以太坊和超级账本两个超级区块链项目的加持也让Go语言成为了很多区块链项目的首选,比原链选用Go语言也充分体会到了其开发区块链底层的优势,但是无需落入语言之争的陷阱,讲求实用主义才是做工程应有之义,比原链核心项目是用Go语言完成,但是周边的很多子项目也有用Java,Python或者JavaScript实现,毕竟生态的多样性才是一个项目长久的根本。

标签:区块链RESULTTXS区块链技术通俗讲解图Restore Truth TokenZKVAULTTXS币

BNB热门资讯
比特币:巴比特专栏 | 笨协议和智能终端,为什么比特币简洁的设计是对的

我们在移动或联通买的手机号,一般包含一个套餐:1、多少分钟通话时间,超出了就要额外收费。2、多少条短信,超出了就要额外收费。3、彩铃。4、亲情号码.

1900/1/1 0:00:00
比特币:零手续费进行比特币交易,Coinbase CEO获得用电子邮件交易比特币的专利

这个专利申请其实早在2015年3月就首次提交了,直到2019年12月17日才由美国专利商标局正式授予。这项技术使用户能够使用绑定到钱包地址的电子邮件地址进行比特币付款,而且无需支付交易手续费.

1900/1/1 0:00:00
区块链:区块链金融业应用:金融业如何拥抱这一颠覆性技术?

原文来源:https://builtin.com译文来源:点滴科技资讯翻译:刘斌合作者:赵云德最初将区块链技术引入金融领域并非偶然.

1900/1/1 0:00:00
LIBRA:2019年美国国会动作频频,其提出的两项加密相关法案将产生什么影响?

随着2020年的到来,美国的立法者正在为加密货币领域起草相关法案,明确定义稳定币,并为Facebook等希望创建自己的加密货币的科技公司提供监管明确性.

1900/1/1 0:00:00
区块链:工行招行深度触链:国有行与股份行的区块链赛马

工商银行经营能力强势,然而总体科技创新能力有待提升。招商银行的区块链跨境清算平台实力强劲,但是其区块链技术应用场景不够丰富.

1900/1/1 0:00:00
比特币:2020年即将迎来减半的八大币种

作者:王也来源:星球日报 今年最值得期待、也是结果最不确定的事件将是比特币的第三次减半。减半的全称为“区块奖励减半”。从代码层面,中本聪的设计是每出21万个块,奖励就会减半.

1900/1/1 0:00:00