成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何使用go語言書寫一個區(qū)塊鏈

如何使用go語言書寫一個區(qū)塊鏈?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名與空間、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、梨林網(wǎng)站維護、網(wǎng)站推廣。

操作環(huán)境:windows10系統(tǒng)、GO 1.11.2、thinkpad t480電腦。

在區(qū)塊鏈公鏈的開發(fā)圈子里,我們找到了一些流行的編程語言,有C++、Golang、Python和最近新起的Rust等等。

我們稍微對比較有名的項目采用的編程語言做個統(tǒng)計,如下圖:

如何使用go語言書寫一個區(qū)塊鏈

老一代的公鏈,比如Bitcoin,Litcoin一般使用C/C++較多(我們看看那個時間,當(dāng)時Go還沒起來呢),新一代的公鏈比如以太坊,聯(lián)盟鏈翹楚超級賬本,開始較多使用Go語言,當(dāng)然我們看到Rust的發(fā)展勢頭也很猛,近兩年的很多公鏈比如波卡,Grin都開始采用Rust語言開發(fā)了。

Go語言的優(yōu)勢

部署簡單

Go 編譯生成的是一個靜態(tài)可執(zhí)行文件,除了 glibc 外沒有其他外部依賴。這讓部署變得異常方便:目標(biāo)機器上只需要一個基礎(chǔ)的系統(tǒng)和必要的管理、監(jiān)控工具,完全不需要操心應(yīng)用所需的各種包、庫的依賴關(guān)系,大大減輕了維護的負(fù)擔(dān)。可直接編譯成機器碼,不依賴其他庫,glibc的版本有一定要求,部署就是扔一個文件上去就完成了。

性能優(yōu)秀

雖然不如 C 和 Java,但通常比原生 Python 應(yīng)用還是高一個數(shù)量級的,適合編寫一些瓶頸業(yè)務(wù)。內(nèi)存占用也非常省。

并發(fā)性&通道

Goroutine 和 channel 使得編寫高并發(fā)的服務(wù)端軟件變得相當(dāng)容易,很多情況下完全不需要考慮鎖機制以及由此帶來的各種問題。單個 Go 應(yīng)用也能有效的利用多個 CPU 核,并行執(zhí)行的性能好。

良好的語言設(shè)計

Go 非常簡單,且易于學(xué)習(xí)。從學(xué)術(shù)的角度講 Go 語言其實非常平庸,不支持許多高級的語言特性;但從工程的角度講,Go 的設(shè)計是非常優(yōu)秀的:規(guī)范足夠簡單靈活。正是由于 Go 的簡單性,任何的 Python、Elixir、C++、Scala 或者 Java 開發(fā)者皆可在一月內(nèi)組建成一個高效的 Go 團隊。

標(biāo)準(zhǔn)庫&工具

Go目前已經(jīng)內(nèi)置了大量的庫,特別是網(wǎng)絡(luò)庫非常強大。更重要的是 Go 自帶完善的工具鏈,大大提高了團隊協(xié)作的一致性。比如 gofmt 自動排版 Go 代碼,很大程度上杜絕了不同人寫的代碼排版風(fēng)格不一致的問題。把編輯器配置成在編輯存檔的時候自動運行 gofmt,這樣在編寫代碼的時候可以隨意擺放位置,存檔的時候自動變成正確排版的代碼。此外還有 gofix, govet 等非常有用的工具。

團隊牛逼

Go語言后面的支持者是Google,語言足夠在各種場景下得到檢驗,同時創(chuàng)始人還是C語言之父,對后續(xù)的發(fā)展和創(chuàng)新可期。

Go成功的項目

Go語言在云時代得到了比較廣泛的應(yīng)用,特別是Docker和K8s這樣的殺手級產(chǎn)品的出現(xiàn)讓Go語言在工程界占有一席之地 除此之外Go語言還有非常多的成功運行中的軟件:

nsq:bitly開源的消息隊列系統(tǒng),性能非常高,目前他們每天處理數(shù)十億條的消息

packer:用來生成不同平臺的鏡像文件,例如VM、vbox、AWS等,作者是vagrant的作者

skynet:分布式調(diào)度框架 Doozer:分布式同步工具,類似ZooKeeper

Heka:mazila開源的日志處理系統(tǒng)

cbfs:couchbase開源的分布式文件系統(tǒng)

tsuru:開源的PAAS平臺,和SAE實現(xiàn)的功能一模一樣

groupcache:memcahe作者寫的用于Google下載系統(tǒng)的緩存系統(tǒng)

god:類似redis的緩存系統(tǒng),但是支持分布式和擴展性

gor:網(wǎng)絡(luò)流量抓包和重放工具

生態(tài)卡位和隱性標(biāo)準(zhǔn)

除了打鐵還需自身硬之外,還有些機遇和運勢,讓區(qū)塊鏈選擇的了Go語言。我們來看區(qū)塊鏈2.0以來最成功的公鏈和聯(lián)盟鏈代表,以太坊和超級賬本Fabric,無一例外都選擇使用Go作為開發(fā)語言(雖然以太坊其實也有其他語言的客戶端版本,但進入到Homestead階段以后,Go客戶端占據(jù)了主導(dǎo)地位),這兩大超級區(qū)塊鏈的影響力可不是一般項目可以比擬的,不僅在生態(tài)中占據(jù)了大的坑位,事實上還隱性的制定了區(qū)塊鏈的標(biāo)準(zhǔn),不論是公鏈中的智能合約,還是聯(lián)盟鏈的技術(shù),都繞不開以太坊和Fabric,那么對于一家想要做區(qū)塊鏈技術(shù)選型的公司來說,最快捷的實現(xiàn)是什么?

自然是直接照搬這兩個項目的創(chuàng)新,再捷徑一點就是直接拿開源代碼改,那么自然Go語言就成為后來者的首選,換種語言重新實現(xiàn)一遍難度也不小,而且如果選擇一些創(chuàng)新但不是非常成熟的語言還會缺失一些特定庫的支持從而導(dǎo)致項目無法開展。

很多人對以太坊的影響力毋庸置疑,但實際上Fabric在企業(yè)區(qū)塊鏈部署上的影響力更不容小覷:

如何使用go語言書寫一個區(qū)塊鏈

圖表來源《2019年全球企業(yè)區(qū)塊鏈基準(zhǔn)研究報告》

Hyperledger Fabric是已部署的企業(yè)區(qū)塊鏈網(wǎng)絡(luò)中使用最多的協(xié)議框架,超級賬本Hyperledger(其中Fabric作為旗艦協(xié)議)是集成商和軟件開發(fā)平臺最常支持的協(xié)議框架,比例達到了53%。而在所有的區(qū)塊鏈技術(shù)書籍里面,有關(guān)超級賬本的書籍是賣的最為火爆這個事實也是側(cè)面印證了超級賬本Hyperledger的影響力。

比原鏈在Go語言中的實踐

我們在選型編程語言的過程中,考量了C,C++, Java,但C/C++大項目維護難度大,而Java又略顯笨重,此時Go語言已經(jīng)在區(qū)塊鏈項目上大放異彩,也逐漸形成技術(shù)和人才的一個頭部效應(yīng),那么順應(yīng)潮流進行技術(shù)選型自然也會減少初始比原鏈項目遇到的阻力,當(dāng)然在逐漸開發(fā)過程中,我們也感受到了選用Go語言帶來的便利和優(yōu)勢。

Go在區(qū)塊鏈上的一個Case

從技術(shù)上來說,區(qū)塊鏈節(jié)點是需要多模塊異步協(xié)同工作的,所以Go語言并發(fā)性和通道就顯得非常有優(yōu)勢,我們看下面交易驗證的例子:

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行代碼之內(nèi),就可以構(gòu)建一個并發(fā)的驗證交易的功能,在高配置的服務(wù)器的情況下,可以跑出10萬以上的TPS。

輕松變成Go語言大師

從人才上來說,比原鏈核心開發(fā)團隊的部分成員之前也沒有做過Go語言開發(fā),但都能夠很快上手,基本在半個月內(nèi)能夠參與核心代碼的開發(fā)和維護了(對于從C/C++/Java有經(jīng)驗的開發(fā)者尤其輕松),這就是語言簡單對團隊構(gòu)建帶來的好處。

統(tǒng)一的協(xié)作

從協(xié)作上來說,通過gofmt 自動排版 Go 代碼,能夠讓核心團隊成員甚至社區(qū)開發(fā)者提交的代碼風(fēng)格的差異性降到最小,提升項目的整體質(zhì)量和可維護性。

關(guān)于如何使用go語言書寫一個區(qū)塊鏈問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

網(wǎng)頁名稱:如何使用go語言書寫一個區(qū)塊鏈
當(dāng)前網(wǎng)址:http://jinyejixie.com/article38/ipippp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、動態(tài)網(wǎng)站、品牌網(wǎng)站建設(shè)全網(wǎng)營銷推廣、網(wǎng)站改版、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
富宁县| 正阳县| 繁昌县| 金门县| 兴国县| 郯城县| 新密市| 英德市| 荆门市| 郯城县| 团风县| 万安县| 莱州市| 涿鹿县| 崇文区| 班玛县| 儋州市| 红安县| 广平县| 广汉市| 永宁县| 德庆县| 抚顺市| 子长县| 集贤县| 高台县| 金门县| 谷城县| 陆良县| 清徐县| 含山县| 胶南市| 汝阳县| 登封市| 天门市| 百色市| 田东县| 隆回县| 铜陵市| 乐安县| 青岛市|