Go語言如今經常被用來作去中心化系統(decentralised system)。其餘類型的公司也都把Go用在產品的核心模塊中,而且它在網站開發中也佔據了一席之地。算法
咱們在決定作Karachain的時候,考量(benchmark)了C,C++, Java, 甚至NodeJs,咱們也試着用一些算法來做爲考量標準。而如今,我表示咱們正在用Go來實現此目標,而且感受不錯。編程
啊,如今建造一個區塊鏈,恰如當時建造一個操做系統!網絡
咱們在建造像區塊鏈平臺這樣複雜的東西時,把注意力放在了那些核心問題上。通過差很少4周的開發與探索,咱們才發現這門奇妙的語言是如何優雅地解答了咱們的難題。閉包
Go語言很簡單。而且每次你中途休息(cessation)以後回到代碼中時,它沒有那麼多詭異的錯誤(quirk)來浪費你的時間。再加上,它所須要的學習量不多,由於它的語法比較大衆,開發者的學習曲線很平緩,這樣的特性自己就很吸引開發者。這也致使(facilitate)出現Bug的概率很低。因此整個開發過程顯得如此簡單快速。併發
通常來說,代碼量越多,項目越難維護。而一個區塊鏈系統須要的代碼可達幾千行,因此咱們須要一門語言,來讓維護變得輕鬆。分佈式
咱們初期有20位出色的工程師,大多來自JavaScript, Java, 和Python,也有的是系統工程師,善使C器。函數
咱們天然須要同一個語言來協同工做。說服(convince)他們來學習Go很是容易,但讓他們一個月速成Go語言工程師,卻也是挺簡單。。。我倒不肯定選擇其餘語言是否也能有此神速。微服務
不似Python, Go不是一種解釋型語言——它是編譯型的。這大大地(drastically)減小了在運行中忽然出現的Bug。這一點有點像C語言,代碼先被編譯,錯誤會在編譯時出現並獲得處理,而後才能運行;可是,它比C更高級,比JavaScript和Python更具生產力。高併發
一個區塊鏈很是須要高效性,鑑於其使用的是加密(cryptographic)算法,鑑於它把大量數據傳輸(propagate)於網絡,並存儲於網絡。工具
這一點,在那些用Golang打造的工具和軟件中顯而易見。Docker,做爲一種微服務的容器,也是用Golang打造。
咱們已經看到了咱們能用Golang打造的微服務輕鬆駕馭百萬數量的請求。
併發(Concurrency)是讓幾個程序或者一個程序的幾個部分同時間運行,或者說並行,以提高計算機的吞吐量(throughput)。一般,在Java或其餘一些語言中,經過線程(threads)來實現併發。而Go則用的是「Goroutines」方法。Goroutines就是說一些函數,它們能夠同另外的一些函數同時被執行。一個Goroutine在內存中佔用大概4kb,而一個線程須要大約1024kb的內存。因此,Goroutines同其餘語言所使用的線程比起來,小了250倍,這使得它也能夠同時執行不斷增長的其餘Goroutines。
如下是Go語言在處理線程方面與Java的不一樣之處:
在Java中,對象(object)在工做單元間共享,其中某一單元爲了訪問到這個數據,必須先獲得它的對象鎖。在Golang中,工做單元間共享一種被稱爲信道(channel)的東西,一個信道基本上就是一個先入先出通道(FIFO pipe)——工做單元能夠向信道發起數據讀寫。
Go語言遵循着它的準則——「不要經過內存共享進行通信,應當經過通信來共享內存」(not to communicate by sharing memory, instead share memory by communicating)。
並行操做對於區塊鏈是有着特殊意義的。同時跑大量函數——這一巧妙而自然的特性使得Go程序靈活地運行於分佈式系統,這正是區塊鏈的主要需求。不過這一特性早已被髮掘,有Docker,MongoDB,Netflix,Uber等等等,他們的產品功能也都主要依賴於高併發。
不少基於穩定區塊鏈的DApps和tools都是用的Go語言。你所須要的某個功能,很輕鬆就能找到一個相對應的庫。
Go是編譯型的,因此直接由操做系統執行。這讓咱們能夠更自如地實現像以太坊沙盒(EVM (Ethereum Virtual Machine))同樣的技術。而若是是Java,由於它自己的運行載體JVM就是一個虛擬機,要再在上面作一個沙盒,實質是更高一層的抽象,這徹底沒有必要,會浪費計算機資源。
固然,Go的使用體驗像是腳本語言,學習成本很低,因此很是適合小型項目。而在QPS(The Queries per second)上,比起Java好太多,因此又適合用來構建高請求量的服務。
一些美妙的Go代碼片斷
1, 這個是輕易地從一個函數返回一個指針到局部變量:
2, 你能夠在函數內部再定義另外的函數並能夠用函數做爲返回值,其中的局部變量會被當作閉包內變量:
3, 基於對象編程:
Go語言是簡單而易學的,是簡潔而易懂的。「實用主義」是它的標籤,性能高於觀感。它被設計用於團隊型工做,而且,效果十分出色。
內容來源:博客園
原文來源:Medium
做者:Naqvi