Go語言
創(chuàng)新互聯(lián)成立與2013年,先為七星關區(qū)等服務建站,七星關區(qū)等地企業(yè),進行企業(yè)商務咨詢服務。為七星關區(qū)企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。
Go語言(Golang)是谷歌2009年推出的一種全新的編程語言,可以在不損失應用程序性能的情況下降低代碼的復雜性。谷歌首席軟件工程師羅布派克(Rob Pike)說:“我們之所以開發(fā)Go,是因為過去10多年間軟件開發(fā)的難度令人沮喪?!?/p>
除比特幣是由C++開發(fā)以外,目前最主流坊的客戶端均有go語言開發(fā),足以可見Go語言在整個區(qū)塊鏈行業(yè)的地位。
C++
C++ 進一步擴充和完善了 C 語言,是一種面向?qū)ο蟮某绦蛟O計語言。C++ 可運行于多種平臺上,如 Windows、MAC 操作系統(tǒng)以及 UNIX 的各種版本。C++是一種使用十分廣泛的計算機程序設計語言。它是一種通用程序設計語言,支持多重編程模式,例如過程化程序設計、數(shù)據(jù)抽象、面向?qū)ο蟪绦蛟O計、泛型程序設計和設計模式等。
大多數(shù)的區(qū)塊鏈企業(yè)都選擇用C++編寫區(qū)塊鏈的底層,最著名的有比特幣、ripple等,主要體現(xiàn)的是強計算性。
Java
Java不同于一般的編譯語言或解釋型語言。它首先將源代碼編譯成字節(jié)碼,然后依賴各種不同平臺上的虛擬機來解釋執(zhí)行字節(jié)碼,從而實現(xiàn)了“一次編寫,到處運行”的跨平臺特性。而區(qū)塊鏈項目的開發(fā),對Java有著明顯的依賴性。
其他的還有Python、系統(tǒng)架構、以太坊、Linux、hyperledger、JavaScript等都會有涉及。
Go語言由Google公司開發(fā),并于2009年開源,相比Java/Python/C等語言,Go尤其擅長并發(fā)編程,性能堪比C語言,開發(fā)效率肩比Python,被譽為“21世紀的C語言”。
Go語言在云計算、大數(shù)據(jù)、微服務、高并發(fā)領域應用應用非常廣泛。BAT大廠正在把Go作為新項目開發(fā)的首選語言。
Go語言能干什么?
1、服務端開發(fā):以前你使用C或者C++做的那些事情,用Go來做很合適,例如日志處理、文件系統(tǒng)、監(jiān)控系統(tǒng)等;
2、DevOps:運維生態(tài)中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go語言開發(fā);
3、網(wǎng)絡編程:大量優(yōu)秀的Web框架如Echo、Gin、Iris、beego等,而且Go內(nèi)置的 net/http包十分的優(yōu)秀;
4、Paas云平臺領域:Kubernetes和Docker Swarm等;
5、分布式存儲領域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;
6、區(qū)塊鏈領域:區(qū)塊鏈里面有兩個明星項目以太坊和fabric都使用Go語言;
7、容器虛擬化:大名鼎鼎的Docker就是使用Go語言實現(xiàn)的;
8、爬蟲及大數(shù)據(jù):Go語言天生支持并發(fā),所以十分適合編寫分布式爬蟲及大數(shù)據(jù)處理。
Go語言與區(qū)塊鏈 涉及到的領域有 區(qū)塊鏈上層應用開發(fā)、區(qū)塊鏈底層系統(tǒng)開發(fā)、高并發(fā)服務器、Web及微服務開發(fā),分布式開發(fā)等。Go語言與區(qū)塊鏈主打區(qū)塊鏈底層系統(tǒng),更加深入。
我知道的是傳智播客開設了這個學科,他們有的學科都會有配套資料和免費課程,可以去看看。
智能合約調(diào)用是實現(xiàn)一個 DApp 的關鍵,一個完整的 DApp 包括前端、后端、智能合約及區(qū)塊 鏈系統(tǒng),智能合約的調(diào)用是連接區(qū)塊鏈與前后端的關鍵。
我們先來了解一下智能合約調(diào)用的基礎原理。智能合約運行在以太坊節(jié)點的 EVM 中。因此要 想調(diào)用合約必須要訪問某個節(jié)點。
以后端程序為例,后端服務若想連接節(jié)點有兩種可能,一種是雙 方在同一主機,此時后端連接節(jié)點可以采用 本地 IPC(Inter-Process Communication,進 程間通信)機制,也可以采用 RPC(Remote Procedure Call,遠程過程調(diào)用)機制;另 一種情況是雙方不在同一臺主機,此時只能采用 RPC 機制進行通信。
提到 RPC, 讀者應該對 Geth 啟動參數(shù)有點印象,Geth 啟動時可以選擇開啟 RPC 服務,對應的 默認服務端口是 8545。。
接著,我們來了解一下智能合約運行的過程。
智能合約的運行過程是后端服務連接某節(jié)點,將 智能合約的調(diào)用(交易)發(fā)送給節(jié)點,節(jié)點在驗證了交易的合法性后進行全網(wǎng)廣播,被礦工打包到 區(qū)塊中代表此交易得到確認,至此交易才算完成。
就像數(shù)據(jù)庫一樣,每個區(qū)塊鏈平臺都會提供主流 開發(fā)語言的 SDK(Software Development Kit,軟件開發(fā)工具包),由于 Geth 本身就是用 Go 語言 編寫的,因此若想使用 Go 語言連接節(jié)點、發(fā)交易,直接在工程內(nèi)導入 go-ethereum(Geth 源碼) 包就可以了,剩下的問題就是流程和 API 的事情了。
總結一下,智能合約被調(diào)用的兩個關鍵點是節(jié)點和 SDK。
由于 IPC 要求后端與節(jié)點必須在同一主機,所以很多時候開發(fā)者都會采用 RPC 模式。除了 RPC,以太坊也為開發(fā)者提供了 json- rpc 接口,本文就不展開討論了。
接下來介紹如何使用 Go 語言,借助 go-ethereum 源碼庫來實現(xiàn)智能合約的調(diào)用。這是有固定 步驟的,我們先來說一下總體步驟,以下面的合約為例。
步驟 01:編譯合約,獲取合約 ABI(Application Binary Interface,應用二進制接口)。 單擊【ABI】按鈕拷貝合約 ABI 信息,將其粘貼到文件 calldemo.abi 中(可使用 Go 語言IDE 創(chuàng)建該文件,文件名可自定義,后綴最好使用 abi)。
最好能將 calldemo.abi 單獨保存在一個目錄下,輸入“l(fā)s”命令只能看到 calldemo.abi 文件,參 考效果如下:
步驟 02:獲得合約地址。注意要將合約部署到 Geth 節(jié)點。因此 Environment 選擇為 Web3 Provider。
在【Environment】選項框中選擇“Web3 Provider”,然后單擊【Deploy】按鈕。
部署后,獲得合約地址為:0xa09209c28AEf59a4653b905792a9a910E78E7407。
步驟 03:利用 abigen 工具(Geth 工具包內(nèi)的可執(zhí)行程序)編譯智能合約為 Go 代碼。abigen 工具的作用是將 abi 文件轉換為 Go 代碼,命令如下:
其中各參數(shù)的含義如下。 (1)abi:是指定傳入的 abi 文件。 (2)type:是指定輸出文件中的基本結構類型。 (3)pkg:指定輸出文件 package 名稱。 (4)out:指定輸出文件名。 執(zhí)行后,將在代碼目錄下看到 funcdemo.go 文件,讀者可以打開該文件欣賞一下,注意不要修改它。
步驟 04:創(chuàng)建 main.go,填入如下代碼。 注意代碼中 HexToAddress 函數(shù)內(nèi)要傳入該合約部署后的地址,此地址在步驟 01 中獲得。
步驟 04:設置 go mod,以便工程自動識別。
前面有所提及,若要使用 Go 語言調(diào)用智能合約,需要下載 go-ethereum 工程,可以使用下面 的指令:
該指令會自動將 go-ethereum 下載到“$GOPATH/src/github.com/ethereum/go-ethereum”,這樣還算 不錯。不過,Go 語言自 1.11 版本后,增加了 module 管理工程的模式。只要設置好了 go mod,下載 依賴工程的事情就不必關心了。
接下來設置 module 生效和 GOPROXY,命令如下:
在項目工程內(nèi),執(zhí)行初始化,calldemo 可以自定義名稱。
步驟 05:運行代碼。執(zhí)行代碼,將看到下面的效果,以及最終輸出的 2020。
上述輸出信息中,可以看到 Go 語言會自動下載依賴文件,這就是 go mod 的神奇之處??吹?2020,相信讀者也知道運行結果是正確的了。
網(wǎng)站標題:go語言與區(qū)塊鏈技能圖譜 go語言開發(fā)區(qū)塊鏈教程
網(wǎng)頁地址:http://m.rwnh.cn/article44/doopcee.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護、面包屑導航、定制網(wǎng)站、網(wǎng)站設計公司、網(wǎng)站營銷、自適應網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)