時間:2023-06-18|瀏覽:254
如今,Go語言常用于構(gòu)建去中心化系統(tǒng),許多公司也使用它甚至在網(wǎng)站開發(fā)中也廣泛應(yīng)用。
在我們決定構(gòu)建Karachain時,我們考慮了許多語言,包括C、C++、Java和NodeJs,并嘗試使用算法作為考慮標(biāo)準(zhǔn)。最終,我們采用了Go語言來實現(xiàn)我們的目標(biāo),并且效果不錯。
構(gòu)建一個區(qū)塊鏈就像建立一個操作系統(tǒng)一樣復(fù)雜!
在構(gòu)建一個復(fù)雜的東西,如區(qū)塊鏈平臺時,我們需要專注于解決核心問題。在經(jīng)過大約4周的開發(fā)和探索之后,我們才意識到這門奇妙的語言如何優(yōu)雅地解決了我們的問題。
Go語言非常簡單易學(xué)。每次當(dāng)你回到代碼時,它沒有太多復(fù)雜的錯誤會讓你浪費時間。由于其廣泛的語法,開發(fā)者的學(xué)習(xí)曲線很平緩,這使得它非常吸引人,并且減少了出現(xiàn)Bug的可能性。因此,整個開發(fā)過程變得簡單快速。
一般來說,代碼量越多,項目的維護越困難。由于一個區(qū)塊鏈系統(tǒng)需要的代碼量可能達(dá)到幾千行,因此我們需要一種語言,使維護變得容易。
我們開始時有20位出色的工程師,大多來自JavaScript、Java和Python等領(lǐng)域,也有系統(tǒng)工程師,熟練掌握C。我們需要讓所有人都使用同一種語言協(xié)同工作。盡管說服他們學(xué)習(xí)Go語言非常容易,但讓他們在一個月內(nèi)成為Go語言工程師也相當(dāng)簡單。我不確定用其他語言是否也能取得相同的進展。
與Python不同,Go是一種編譯型語言,這大大減少了在運行中出現(xiàn)Bug的可能性。這類似于C語言,代碼在運行之前會先被編譯并在編譯時得到處理,然后才能運行。相比C更高一些,比JavaScript和Python更生產(chǎn)力。
區(qū)塊鏈需要高效性,因為它使用加密算法,處理和傳輸大量數(shù)據(jù)。這一點在那些用Go語言編寫的工具和軟件中非常明顯。Docker是一種微服務(wù)容器,也是用Go語言編寫的。
我們已經(jīng)看到了我們能夠使用Go語言構(gòu)建的微服務(wù)如何輕松地處理數(shù)百萬數(shù)量的請求數(shù)量。
并發(fā)是讓幾個程序或一些程序的部分同時運行,以提高計算機吞吐量的方法。通常,在Java或其他語言中,線程用于實現(xiàn)并發(fā)。Go使用的是" Goroutines "方法。Goroutines表示一組函數(shù),它們可以與其他函數(shù)同時執(zhí)行。一個Goroutine大概占用4kb的內(nèi)存,而線程需要大約1024kb的內(nèi)存。因此,Goroutines占用的內(nèi)存小250倍,這使得它可以同時執(zhí)行不斷增加的其他Goroutines。
在Java中,對象在工作單元之間共享,某單元想要訪問該數(shù)據(jù)必須先獲得對象鎖。在Go中,工作單元之間共享一種稱為信道(channel)的內(nèi)容,它基本上是一種FIFOpipe。工作單元可以向信道發(fā)起數(shù)據(jù)讀/寫。
Go語言遵循著它的準(zhǔn)則——“不要通過內(nèi)存共享進行通訊,應(yīng)當(dāng)通過通訊來共享內(nèi)存”。
并行操作在區(qū)塊鏈中具有特殊意義。同時運行大量函數(shù)——這一巧妙、天然的特性使得Go程序靈活地運行于分布式系統(tǒng),這正是區(qū)塊鏈的主要需求。這一特性已經(jīng)被應(yīng)用于Docker、MongoDB、Netflix、Uber等高并發(fā)產(chǎn)品的開發(fā)。
許多基于穩(wěn)定區(qū)塊鏈的DApps和工具都是用Go語言編寫的。你可以很容易地找到與所需功能相對應(yīng)的庫。
Go是一種編譯型語言,所以直接由操作系統(tǒng)執(zhí)行。這使我們可以更自由地實現(xiàn)像以太坊沙盒(EVM(EthereumVirtualMachine))這樣的技術(shù)。如果是Java,由于它的運行載體JVM是一種虛擬機,再在其上實現(xiàn)沙盒就是一層更高的抽象,這是沒有必要的,會浪費計算機資源。
當(dāng)然,Go的使用體驗類似于腳本語言,學(xué)習(xí)成本很低,因此非常適合于小型項目。相比Java,它能夠更快地響應(yīng)查詢,適用于構(gòu)建高請求量的服務(wù)。
以下是一些出色的Go代碼片段:
1、將指針返回給局部變量:
2、在函數(shù)內(nèi)部定義其他函數(shù),可以將函數(shù)作為返回值,其中局部變量將被視為閉包內(nèi)變量:
3、基于對象編程:
總之,Go語言簡單易學(xué),簡潔易懂,“實用主義”是它的標(biāo)簽,高性能是它的特點。它被設(shè)計用于團隊工作,效果十分出色。
本文內(nèi)容來自網(wǎng)絡(luò),如果侵犯了您的權(quán)益,請聯(lián)系我們刪除。