爲何我選擇Go來構建區塊鏈

https://medium.com/karachain/why-i-am-building-a-blockchain-in-go-6395a60b24dd算法


GoLang已經成爲今天開發分散系統的首選語言。 每一個其餘組織都在使用它做爲核心處理模塊,在Web開發中也得到了很大的推進力。 當咱們決定構建卡拉OK時,咱們評估了多種語言,如C,C ++,Java甚至NodeJs。 咱們也試着用一些算法的基準來決定實現Karachain協議的核心語言。 今天,我很高興地宣佈,咱們正在使用Go來達到這個目的。編程

如今構建區塊鏈至關於及時構建操做系統。

咱們專一於構建像區塊鏈平臺這樣複雜的一些核心問題。 通過近4周的開發和研究,咱們發現了這個驚人的編程語言的美麗如何解決了咱們的問題。小程序

可長期維護的代碼

go很簡單。 並且,當你在中止以後回到語言時,它的怪癖數量會減小。 此外,還有不多的東西要學習,還有一些作典型的方法 - 這種質量大大下降了開發人員學習曲線的陡峭程度。 這個功能,不管用什麼語言,都會吸引大量的開發者。 這些緣由也促進了錯誤發生的機會。 考慮到每個bug在任何開發中的巨大延遲,這最終使得整個開發過程變得更簡單和更快。網絡

越多的代碼添加到項目中,越難維護。 因爲區塊鏈可能須要數千行代碼,所以咱們須要一種可使這樣一個巨大項目的維護很是容易的語言。閉包

易於開發人員掌握

當咱們開始的時候,咱們有一個由20名優秀的開發人員組成的團隊,其中大部分來自JavaScript,Java和Python等編程語言。 有些仍是C系統工程師。 咱們須要使用一種通用的編程語言,說服他們學習Go很是容易,可是培訓他們變得富有成效Go的開發人員在一個月以內很容易就能夠實現,我不肯定咱們是否可以很快用其餘語言實現這一目標。併發

速度和效率

與Python不一樣,Go不是一種解釋型語言 - 它是一種編譯語言。 這大大減小了在解釋型語言中發生的「即時」錯誤的開銷。 這與C語言相似,首先編譯代碼,顯示要求解析的錯誤,而後才運行代碼; 可是它比C更高級的語言,比JavaScript和Python更有效率。 區塊鏈須要很是高效,主要是因爲密碼計算和大量的數據傳播以及存儲在網絡中。異步

它是爲分佈式系統而構建的

這已經被已經使用Go構建的工具和軟件證實了。 Docker,微服務的容器也是使用Golang構建的。 咱們已經看到,與PHP相比,使用Go構建的微服務可輕鬆擴展至數百萬個請求。編程語言

協程

併發性是可以異步或並行運行多個程序或程序的多個部分,從而提升吞吐量。 一般,線程用於實現諸如Java等語言的併發。 在Go中,使用Goroutines的方法。 Goroutines是能夠與其餘功能並行運行的方法或函數。 固然,Goroutine在RAM中佔用大約4千字節的空間。 相反,一個線程在RAM中佔用大約1024千字節 。 所以,Goroutines比其餘語言的線程佔用的空間減小了250倍,這使得能夠同時運行愈來愈多的Goroutines。 如下是Go中與Java相比處理線程差別的解釋:分佈式

在Java中,對象是在工做單元之間共享的,爲了訪問這部分數據,一個工做單元必須先得到一個鎖。 在Go中,頻道在工做單元之間共享,而頻道基本上是FIFO - 工做單元能夠讀取或寫入channel。
堅持「不要經過共享內存來溝通,而是經過溝通共享內存」的口號。

並且,區塊鏈對於並行操做具備很是重要的意義,在這個特殊的功能中很是方便。 此外,並行運行大量功能的能力容許使用Go編寫的程序在分佈式系統上運行,這是區塊鏈技術的主要需求。 Go採用併發的一些深入的例子是Docker,MongoDB,Netflix,Uber等 - 併發性和可以以分佈式方式運行的公司是最重要的。函數

區塊鏈世界的每一個人都在使用它

如今大部分穩定的基於區塊鏈的DApps和工具都是使用Golang構建的。 很容易找到所需的庫和包 。 Go是一種編譯語言,所以它能夠直接在OS上運行。 這可讓咱們以更好的方式構建像EVM(以太坊虛擬機)這樣的技術。 與此相反,咱們使用運行在本身的JVM上的Java,而後運行在OS之上。 所以,爲本身在另外一臺虛擬機上運行的智能合約構建虛擬機引入了徹底沒必要要的抽象級別。 這也大大下降了性能。 Go提供了腳本語言的感受,而且啓動時間很短,所以對於小程序很是有用。 Go的每秒查詢(QPS)比Java好得多。 所以,Go能夠用來構建處理大量請求的系統。

關於Go的一些漂亮的代碼示例

  • 下面是如何簡單地從函數返回一個指向局部變量的指針:
  • 你能夠在函數內部編寫函數,你能夠像函數式語言那樣返回函數,而它周圍的局部變量能夠做爲閉包中的變量:
  • 面向對象
    go是一個很是簡單,簡潔,易於學習的語言,其標誌是「實用主義」,而不是語法美。 它旨在解決團隊環境中的軟件工程問題,在這方面,它作得很是好。
相關文章
相關標籤/搜索