原因:1、Go语言具有部署简单、性能优秀、并行执行性能好、良好语言设计、内置大量库、团队牛逼等优势。2、以太坊和超级账本都选择使用Go作为开发语言;这两大超级区块链的影响力很大,不仅在生态中占据了大的坑位,事实上还隐性的制定了区块链的标准。
图表来源《2019年全球企业区块链基准研究报告》
Hyperledger Fabric是已部署的企业区块链网络中使用最多的协议框架,超级账本Hyperledger(其中Fabric作为旗舰协议)是集成商和软件开发平台最常支持的协议框架,比例达到了53%。而在所有的区块链技术书籍里面,有关超级账本的书籍是卖的最为火爆这个事实也是侧面印证了超级账本Hyperledger的影响力。
我们在选型编程语言的过程中,考量了C,C++, Java,但C/C++大项目维护难度大,而Java又略显笨重,此时Go语言已经在区块链项目上大放异彩,也逐渐形成技术和人才的一个头部效应,那么顺应潮流进行技术选型自然也会减少初始比原链项目遇到的阻力,当然在逐渐开发过程中,我们也感受到了选用Go语言带来的便利和优势。
从技术上来说,区块链节点是需要多模块异步协同工作的,所以Go语言并发性和通道就显得非常有优势,我们看下面交易验证的例子:
func ValidateTxs(txs []*bc.Tx, block *bc.Block) []*ValidateTxResult { txSize := len(txs) //init the goroutine validate worker var wg sync.WaitGroup workCh := make(chan *validateTxWork, txSize) resultCh := make(chan *ValidateTxResult, txSize) closeCh := make(chan struct{}) for i := 0; i <= validateWorkerNum && i < txSize; i++ { wg.Add(1) go validateTxWorker(workCh, resultCh, closeCh, &wg) } //sent the works for i, tx := range txs { workCh <- &validateTxWork{i: i, tx: tx, block: block} } //collect validate results results := make([]*ValidateTxResult, txSize) for i := 0; i < txSize; i++ { result := <-resultCh results[result.i] = result } close(closeCh) wg.Wait() close(workCh) close(resultCh) return results }
我们使用Routine+Ch+WaitGroup在30行代码之内,就可以构建一个并发的验证交易的功能,在高配置的服务器的情况下,可以跑出10万以上的TPS。
轻松变成Go语言大师
从人才上来说,比原链核心开发团队的部分成员之前也没有做过Go语言开发,但都能够很快上手,基本在半个月内能够参与核心代码的开发和维护了(对于从C/C++/Java有经验的开发者尤其轻松),这就是语言简单对团队构建带来的好处。
从协作上来说,通过gofmt 自动排版 Go 代码,能够让核心团队成员甚至社区开发者提交的代码风格的差异性降到最小,提升项目的整体质量和可维护性。
Go语言本身的特质和优势为其做好了铺垫,而以太坊和超级账本两个超级区块链项目的加持也让Go语言成为了很多区块链项目的首选,比原链选用Go语言也充分体会到了其开发区块链底层的优势,但是无需落入语言之争的陷阱,讲求实用主义才是做工程应有之义,比原链核心项目是用Go语言完成,但是周边的很多子项目也有用Java,Python或者JavaScript实现,毕竟生态的多样性才是一个项目长久的根本。
更多编程相关知识,请访问:编程视频!!
以上就是为什么用go语言写区块链的详细内容,更多请关注其它相关文章!