主页 > imtoken钱包如何下载 > 为什么要用go语言写区块链

为什么要用go语言写区块链

imtoken钱包如何下载 2023-10-06 05:11:37

为什么用go语言写区块链,第1张

为什么要用go语言写区块链

理由: 1. Go语言具有部署简单、性能优异、并行执行性能好、语言设计好、内置大量库、团队强大等优点。 2. Ethereum和Hyperledger都选择使用Go作为开发语言; 这两条超级区块链的影响力很大,不仅在生态中占有很大的地位,还暗中制定了区块链标准。

本教程运行环境:windows10系统,GO 1.11.2,thinkpad t480电脑。

在区块链公链的开发圈中,我们发现了一些流行的编程语言,包括C++、Golang、Python以及最近的Rust等。

下面我们对比较著名的项目使用的编程语言做一个小统计,如下图:

老一代的公链,比如比特币、莱特币,一般都是用C/C++比较多(看那个时候,Go还没有起来的时候),而新一代的公链比如以太坊,联盟的领头羊chain,Hyperledger,开始更多的使用Go语言,当然我们也看到了Rust的发展势头也很强劲。 近两年,Polkadot、Grin等众多公链开始使用Rust语言进行开发。

Go语言的优点是易于部署

Go 编译生成一个静态可执行文件,除了 glibc 之外没有任何外部依赖项。 这使得部署极其方便:目标机器上只需要一个基础系统和必要的管理、监控工具,无需担心应用需要的各种包和库的依赖,大大减轻了维护负担. 无需依赖其他库,可直接编译成机器码。 glibc的版本有一定的要求,抛一个文件上去就完成了部署。

完美的表现

虽然不如C和Java,但通常比原生Python应用高一个数量级,适合写一些瓶颈业务。 内存使用率也很低。

并发和通道

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

矿工自己搭建以太坊矿池教程_以太坊搭建私有链_以太坊联盟链搭建

良好的语言设计

Go非常简单易学。 从学术的角度来看,Go 语言其实很平庸,不支持很多高级的语言特性; 但从工程的角度来看,Go 的设计非常好:规范足够简单和灵活。 由于 Go 的简单性,任何 Python、Elixir、C++、Scala 或 Java 开发人员都可以在一个月内组建一个高效的 Go 团队。

标准库和工具

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

很棒的团队

Go语言背后的支持者是谷歌。 该语言足以在各种场景中进行测试。 同时创始人也是C语言之父,后续的发展和创新可期。

去成功的项目

Go语言在云时代得到了广泛的应用,尤其是Docker、K8s等杀手级产品的出现,让Go语言在工程界占有一席之地。 另外,Go语言还有很多运行成功的软件:

nsq:Bitly开源的高性能消息队列系统。 目前,他们每天处理数十亿条消息

packer:用于生成不同平台的镜像文件,如VM、vbox、AWS等,作者为vagrant的作者

skynet:分布式调度框架 Doozer:分布式同步工具,类似ZooKeeper

Heka:mazila开源日志处理系统

cbfs:Couchbase 开源分布式文件系统

以太坊搭建私有链_矿工自己搭建以太坊矿池教程_以太坊联盟链搭建

tsuru:一个开源的PaaS平台,功能和SAE一模一样

groupcache:memcahe作者为谷歌下载系统编写的缓存系统

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

gor:网络流量捕获和重放工具

推荐学习:Golang教程

生态插槽和隐性标准

区块链选择Go语言,除了需要打铁的辛苦,还有一些机遇和幸运。 我们来看看自区块链2.0以来最成功的公链和联盟链代表,以太坊和Hyperledger Fabric。 Homestead阶段之后,Go客户端占据了主导地位),这两个超级区块链的影响力不是普通项目可以比的,不仅在生态中占据了很大的坑,还暗中制定了区块链的标准,无论是公链中的智能合约还是联盟链的技术,都绕不开以太坊和Fabric,那么对于一个想要选择区块链技术的企业来说,最快的实现方式是什么?

自然是直接抄袭这两个项目的创新点,而直接使用开源代码修改是一个捷径,Go语言自然成为后来者的首选。 用另一种语言重新实现它并不容易,而且如果你选择了一些创新但不是很成熟的语言,也会缺乏对某些特定库的支持,导致项目无法开展。

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

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

Hyperledger Fabric是部署的企业区块链网络中使用最多的协议框架,其中Hyperledger(其中Fabric是旗舰协议)是集成商和软件开发平台最常支持的协议框架,占比53%。 在所有的区块链技术书籍中,超级账本类书籍最为火爆,也侧面印证了超级账本的影响力。

比原链在Go语言中的实践

在选择编程语言的过程中,我们考虑过C、C++、Java以太坊联盟链搭建,但是C/C++对于大型项目来说维护起来比较困难,而Java就有点笨重了。 此时,Go语言已经在区块链项目中大放异彩。 也逐渐形成了技术和人才的头部效应,顺应技术选型自然会减少比原链项目初期遇到的阻力。 当然,在逐渐发展的过程中,我们也感受到了选择Go语言所带来的便利和优势。

矿工自己搭建以太坊矿池教程_以太坊搭建私有链_以太坊联盟链搭建

Go on Blockchain 案例

从技术上讲,区块链节点需要多个模块异步协同工作,因此 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语言的特性和优势为其铺平了道路,而以太坊和Hyperledger两大超级区块链项目的支持也让Go语言成为众多区块链项目的首选。 我已经充分体会到开发区块链底层的优势,但没必要陷入语言之争的陷阱。 强调实用主义是工程的应有之义。 比原链的核心项目是用 Go 语言完成的,但是围绕 Projects 的很多子分支也可以用 Java、Python 或 JavaScript 来实现。 毕竟,生态多样性是一项长期工程的基础。