go語言開發(fā)iot go語言開發(fā)web

一學(xué)就會,手把手教你用Go語言調(diào)用智能合約

智能合約調(diào)用是實現(xiàn)一個 DApp 的關(guān)鍵,一個完整的 DApp 包括前端、后端、智能合約及區(qū)塊 鏈系統(tǒng),智能合約的調(diào)用是連接區(qū)塊鏈與前后端的關(guān)鍵。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、網(wǎng)站建設(shè)、萊蕪網(wǎng)絡(luò)推廣、小程序定制開發(fā)、萊蕪網(wǎng)絡(luò)營銷、萊蕪企業(yè)策劃、萊蕪品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供萊蕪建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:muchs.cn

我們先來了解一下智能合約調(diào)用的基礎(chǔ)原理。智能合約運行在以太坊節(jié)點的 EVM 中。因此要 想調(diào)用合約必須要訪問某個節(jié)點。

以后端程序為例,后端服務(wù)若想連接節(jié)點有兩種可能,一種是雙 方在同一主機,此時后端連接節(jié)點可以采用 本地 IPC(Inter-Process Communication,進 程間通信)機制,也可以采用 RPC(Remote Procedure Call,遠(yuǎn)程過程調(diào)用)機制;另 一種情況是雙方不在同一臺主機,此時只能采用 RPC 機制進行通信。

提到 RPC, 讀者應(yīng)該對 Geth 啟動參數(shù)有點印象,Geth 啟動時可以選擇開啟 RPC 服務(wù),對應(yīng)的 默認(rèn)服務(wù)端口是 8545。。

接著,我們來了解一下智能合約運行的過程。

智能合約的運行過程是后端服務(wù)連接某節(jié)點,將 智能合約的調(diào)用(交易)發(fā)送給節(jié)點,節(jié)點在驗證了交易的合法性后進行全網(wǎng)廣播,被礦工打包到 區(qū)塊中代表此交易得到確認(rèn),至此交易才算完成。

就像數(shù)據(jù)庫一樣,每個區(qū)塊鏈平臺都會提供主流 開發(fā)語言的 SDK(Software Development Kit,軟件開發(fā)工具包),由于 Geth 本身就是用 Go 語言 編寫的,因此若想使用 Go 語言連接節(jié)點、發(fā)交易,直接在工程內(nèi)導(dǎo)入 go-ethereum(Geth 源碼) 包就可以了,剩下的問題就是流程和 API 的事情了。

總結(jié)一下,智能合約被調(diào)用的兩個關(guān)鍵點是節(jié)點和 SDK。

由于 IPC 要求后端與節(jié)點必須在同一主機,所以很多時候開發(fā)者都會采用 RPC 模式。除了 RPC,以太坊也為開發(fā)者提供了 json- rpc 接口,本文就不展開討論了。

接下來介紹如何使用 Go 語言,借助 go-ethereum 源碼庫來實現(xiàn)智能合約的調(diào)用。這是有固定 步驟的,我們先來說一下總體步驟,以下面的合約為例。

步驟 01:編譯合約,獲取合約 ABI(Application Binary Interface,應(yīng)用二進制接口)。 單擊【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 文件轉(zhuǎn)換為 Go 代碼,命令如下:

其中各參數(shù)的含義如下。 (1)abi:是指定傳入的 abi 文件。 (2)type:是指定輸出文件中的基本結(jié)構(gòu)類型。 (3)pkg:指定輸出文件 package 名稱。 (4)out:指定輸出文件名。 執(zhí)行后,將在代碼目錄下看到 funcdemo.go 文件,讀者可以打開該文件欣賞一下,注意不要修改它。

步驟 04:創(chuàng)建 main.go,填入如下代碼。 注意代碼中 HexToAddress 函數(shù)內(nèi)要傳入該合約部署后的地址,此地址在步驟 01 中獲得。

步驟 04:設(shè)置 go mod,以便工程自動識別。

前面有所提及,若要使用 Go 語言調(diào)用智能合約,需要下載 go-ethereum 工程,可以使用下面 的指令:

該指令會自動將 go-ethereum 下載到“$GOPATH/src/github.com/ethereum/go-ethereum”,這樣還算 不錯。不過,Go 語言自 1.11 版本后,增加了 module 管理工程的模式。只要設(shè)置好了 go mod,下載 依賴工程的事情就不必關(guān)心了。

接下來設(shè)置 module 生效和 GOPROXY,命令如下:

在項目工程內(nèi),執(zhí)行初始化,calldemo 可以自定義名稱。

步驟 05:運行代碼。執(zhí)行代碼,將看到下面的效果,以及最終輸出的 2020。

上述輸出信息中,可以看到 Go 語言會自動下載依賴文件,這就是 go mod 的神奇之處。看到 2020,相信讀者也知道運行結(jié)果是正確的了。

為什么越來越多人偏愛用Go語言做開發(fā)?慕課網(wǎng)也越來越多關(guān)于go的課程了?

個人認(rèn)為:

1、上手快

只要你有其會其他語言,學(xué)習(xí)go很快。

2、go語言非常適合寫服務(wù)端

因為它開源,所以很容易找到你想要的框架,開發(fā)效率非常高。

3、跨平臺

你的一個程序可以隨意部署。

不受操作系統(tǒng)限制,windwos、linux、macos都能支持。

不受處理器限制,x86、arm也都可以,你要知道國產(chǎn)可替代的U就是arm。

4、部署簡單

編譯成一個文件就可以發(fā)布了,不需要環(huán)境支撐。

以上是最基本的理由,當(dāng)然這些對于.net core來說也一樣,但是對比一下發(fā)布的文件大小你就知道該選擇誰了。

Go語言的跨平臺能力到底有多強?看完你就知道了

對比于其他語言的程序,Go語言的跨平臺能力是真的強,拿.Net和JAVA來說吧,.Net在.Net core出現(xiàn)之前是不能跨平臺的,只能在windows上編譯運行,即使是.net core出現(xiàn)以后,跨平臺的程序也是相當(dāng)?shù)穆闊?。而java雖然一直都可以跨平臺,但是運行JAVA程序的機器上也必須要有JAVA程序運行環(huán)境JRE。而相對于Go程序,跨平臺就簡單的多了,只需要在編譯指定目標(biāo)程序運行的架構(gòu)和環(huán)境即可編譯出指定操作系統(tǒng)和架構(gòu)的程序。

以上是指定了go的環(huán)境變量后執(zhí)行的go build命令進行目標(biāo)程序的構(gòu)建,這種方式會一直生效的,如果不讓他一直生效,可以在構(gòu)建的時候臨時指定環(huán)境變量,下面以window的環(huán)境為例,來介紹臨時指定環(huán)境變量的方式構(gòu)建可以在Linux環(huán)境下運行的可執(zhí)行程序:

可以根據(jù)不同的架構(gòu)和操作系統(tǒng)將其編寫為不同的.bat的可執(zhí)行文件放置在程序的根目錄,Linux的和MAC的也一樣編寫成腳本文件放置在程序的根目錄,這樣在構(gòu)建的時候就不用再敲命令了,直接運行腳本就可以了。

Java程序編譯打包后為war包或者是java包,必須執(zhí)行java -jar 命令或者將其放置到tomcat的指定目錄下,運行tomcat程序。而Go語言編寫的程序最終為可執(zhí)行的文件(window下編譯出的是.exe的可執(zhí)行文件),只需要將其賦予可執(zhí)行的權(quán)限就可以直接運行了。

構(gòu)建JAVA程序的鏡像需要指定java的基礎(chǔ)鏡像,否則就需要在鏡像中安裝java的運行環(huán)境了,下面展示的是構(gòu)建的一個JAVA程序的鏡像,構(gòu)建出來鏡像的體積相對比較大

而Go程序制作出的鏡像就不需要安裝任何的依賴環(huán)境,因為他在打包的時候就已經(jīng)將依賴的包一塊打包到一起了

拿著這個鏡像就可以到處運行了。

通過對比我們可以發(fā)現(xiàn),如果沒有之前的技術(shù)和業(yè)務(wù)的積累,重新開發(fā)一個新的項目,使用go去開發(fā)無疑是最容易上手的,所以現(xiàn)在很多公司都使用go進行開發(fā),也逐漸將其他語言的項目逐步的用go語言進行改造。其實用什么語言不重要,合適的才重要,開發(fā)項目在選擇語言的時候也會綜合多方面來考慮選擇合適的語言和架構(gòu),畢竟很多公司都不是搞研究的,都需要項目來賺錢,所以開發(fā)的速度、客戶的滿意度、項目交付的時間才是驅(qū)動公司技術(shù)的主要因素。

我們個人也應(yīng)該不斷完善自己的技術(shù)棧,不應(yīng)該太依靠某種語言,最重要的還是自己的架構(gòu)思想和底層架構(gòu)知識,只有掌握了這些才能夠不被 社會 和公司“優(yōu)化”。

哪種物聯(lián)網(wǎng)編程語言最熱門

影響物聯(lián)網(wǎng)IoT實施的最主要因素之一是人才缺口:現(xiàn)有市場供應(yīng)無法跟上擁有物聯(lián)網(wǎng)技術(shù)的工程師的需求。根據(jù)Canonical的研究,大約68%的公司正在努力為他們的物聯(lián)網(wǎng)項目雇傭開發(fā)人員。但技能短缺的另一面是,職業(yè)前景對于具有物聯(lián)網(wǎng)技術(shù)的專業(yè)人員來說是非常光明的。在這里,我們重點關(guān)注物聯(lián)網(wǎng)中最常用的編程語言,即Java,C,C ++,Python,JavaScript和Go,然后分析專門從事這些語言的專業(yè)人員可以獲得多少收入。我們還會考慮資歷和地點等因素。

作為一個技術(shù)強國,美國在IT 薪資標(biāo)準(zhǔn)方面常常成為世界其他國家的基準(zhǔn)。以下是根據(jù)Payscale的數(shù)據(jù)對美國頂級物聯(lián)網(wǎng)IoT編程語言以及相應(yīng)的開發(fā)者薪資數(shù)據(jù)的簡要統(tǒng)計。

美國最熱門的物聯(lián)網(wǎng)編程語言的平均工資統(tǒng)計

平均而言,Java和C開發(fā)人員可以獲得比物聯(lián)網(wǎng)中使用其他語言的開發(fā)人員更高的薪水,盡管高級Go編程人員的薪水潛力最高、盡管初級和中級Go開發(fā)人員與其他同行相比低調(diào),但Skilled Go的開發(fā)人員卻是業(yè)內(nèi)薪酬最高的開發(fā)人員之一。

從Java開始,我們來看看物聯(lián)網(wǎng)IoT中最流行的編程語言的平均薪水。

Java:物聯(lián)網(wǎng)技術(shù)最流行的編程語言

Java有多個應(yīng)用領(lǐng)域,從后端編程到Android的移動應(yīng)用。根據(jù) Eclipse基金會執(zhí)行的2017年物聯(lián)網(wǎng)開發(fā)者調(diào)查,Java首次提供了用于物聯(lián)網(wǎng)開發(fā)的編程語言列表,專門用于網(wǎng)關(guān)和云。

使用Java進行物聯(lián)網(wǎng)開發(fā)的一個主要好處是便攜性。Java沒有任何硬件限制,這意味著您可以在計算機上編寫和調(diào)試Java代碼,并將其部署到幾乎任何運行Java虛擬機的設(shè)備上。出于這個原因,許多公司選擇聘請Java開發(fā)人員進行物聯(lián)網(wǎng)項目。

根據(jù)Payscale的數(shù)據(jù),美國Java開發(fā)者的平均薪水約為8.8萬美元。瑞士的Java開發(fā)者的平均收入較高,每年約為96,000美元。與此同時,英國和以色列的Java開發(fā)人員的平均薪水則明顯較低,分別為4萬5千美元和33萬美元。

Java開發(fā)人員的平均工資

但是,Java開發(fā)人員的平均工資可能不具代表性,因為根據(jù)相關(guān)技術(shù)人員的經(jīng)驗和資歷,個人薪酬差別很大。例如,從Java初級到高級Java開發(fā)人員的薪酬跳躍在美國是6.6萬美元到97萬美元,在英國是從41,000美元到61,000美元。

Java在美國和英國的平均初級,中級和高級Java開發(fā)人員工資

我們對美國Java開發(fā)者工資的研究表明,不同州的平均薪水可能遠(yuǎn)高于全國平均水平。例如,加利福尼亞州的開發(fā)人員對美國開發(fā)人員的平均薪水最高(13.3萬美元)。這一事實在很大程度上是該州IT總體高技能需求的一個功能。

C:嵌入式設(shè)備的關(guān)鍵編程語言

C編程語言接下來成為物聯(lián)網(wǎng)IoT堆棧最喜歡的語言。然而,根據(jù)Eclipse基金會的說法,它被認(rèn)為是受限設(shè)備開發(fā)的領(lǐng)先技術(shù)。

該編程語言提供對低級硬件API的直接訪問。由于其與機器語言的相似性,C非??焖偾异`活,使其成為處理能力有限的物聯(lián)網(wǎng)系統(tǒng)的完美選擇。

與Java類似,C開發(fā)人員的薪酬在世界各地差異很大。在美國,C開發(fā)人員每年可賺取約10萬美元,而在瑞士,C開發(fā)人員的平均年薪為92,000美元。在我們分析的國家中,C專家的最低工資在英國。據(jù)Payscale稱,英國年平均C開發(fā)人員薪水僅略高于4萬美元。

C開發(fā)人員的平均工資。來源:Payscale

C級初級和高級開發(fā)人員的薪酬差異也很大。高級C開發(fā)人員的收入幾乎是美國和英國入門級員工的兩倍。

C在美國和英國的初級,中級和高級C開發(fā)人員的平均工資

C ++:Linux的第一語言

與其前身C一樣,C ++已廣泛用于嵌入式系統(tǒng)開發(fā)。但是,C ++的主要優(yōu)勢在于處理能力,在任務(wù)更加復(fù)雜時使其成為C的有用替代方案。

C ++最適合編寫硬件特定的代碼。它可與Linux,第一大物聯(lián)網(wǎng)技術(shù)操作系統(tǒng)配合使用。但是,與Java相比,它具有有限的可移植性。

與C開發(fā)人員相比,C ++工程師的薪水更低。我們的研究發(fā)現(xiàn),C ++開發(fā)人員在以色列和丹麥的預(yù)計收入約為82-86,000美元,而在美國,這個數(shù)字僅為71,000美元。

平均C ++開發(fā)人員工資統(tǒng)計。來源:Payscale

然而,盡管美國的C ++開發(fā)人員平均費用較低,但經(jīng)驗豐富的專家在職業(yè)生涯后期可以達到六位數(shù)。

美國和英國的初級,中級和高級C ++開發(fā)人員的平均工資。

Python:面向數(shù)據(jù)的物聯(lián)網(wǎng)系統(tǒng)的解決方案

作為最受歡迎的網(wǎng)絡(luò)編程語言之一,以及科學(xué)計算的前沿技術(shù),Python在物聯(lián)網(wǎng)開發(fā)中也獲得了巨大的推動力。 對于數(shù)據(jù)密集型應(yīng)用程序,Python是一個不錯的選擇,特別是在管理和組織復(fù)雜數(shù)據(jù)時。

此外,由于語言的清晰語法,用Python編寫的源代碼非常緊湊且非常易讀。這對于計算能力和內(nèi)存有限的小型設(shè)備來說效果特別好,盡管速度不如C / C ++快。

美國的平均Python開發(fā)人員薪水約在71k美元左右,而擁有類似技能的開發(fā)人員則分別在以色列和瑞士分別可以獲得約68-67k的薪水。

Python開發(fā)人員的平均工資。來源:Payscale

與其他一樣,初級和高級Python開發(fā)人員之間的薪酬差距很大。

美國和英國的平均初級,中級和高級Python開發(fā)人員薪水

仔細(xì)觀察數(shù)據(jù)顯示,盡管全國平均水平相對較低,但在美國,Python開發(fā)人員的薪水可能會非常高。由于開發(fā)商需求迫切,供應(yīng)量有限,某些州的薪酬可能高達14萬美元。傳統(tǒng)上,加利福尼亞州是為技術(shù)專家提供最高工資的州之一。當(dāng)?shù)氐腜ython開發(fā)人員平均賺取了大約13.5萬美元。

JavaScript:事件驅(qū)動物聯(lián)網(wǎng)應(yīng)用的最佳解決方案

根據(jù)年度StackOverflow開發(fā)者調(diào)查顯示,JavaScript是過去五年來最流行的編程語言之一,是現(xiàn)代Web開發(fā)中的核心技術(shù)。

在許多其他應(yīng)用領(lǐng)域中,JavaScript是物聯(lián)網(wǎng)編程語言中最常用的構(gòu)建事件驅(qū)動系統(tǒng)。它可以管理連接設(shè)備的大型網(wǎng)絡(luò),并且在需要處理多個任務(wù)而無需等待其他任務(wù)完成時可以勝任。JavaScript對IoT的主要優(yōu)勢之一是非常節(jié)約資源。

隨著IBM和三星等主要公司在他們的物聯(lián)網(wǎng)項目中積極采用JavaScript(即Node.js),對具有物聯(lián)網(wǎng)(IoT)體驗的JavaScript開發(fā)人員的需求仍然很高。這意味著能夠全面的提高薪水。

瑞士的JavaScript開發(fā)者平均可以賺取約96k美元。令人驚訝的是,美國JavaScript專家的平均薪水要低得多,開發(fā)者可以得到6.9萬美元。

全球JavaScript開發(fā)人員的平均工資。來源:Payscale

不同州之間的薪資數(shù)據(jù)差別很大:例如,研究發(fā)現(xiàn),康涅狄格州,馬薩諸塞州,加利福尼亞州和紐約州是JavaScript開發(fā)者收入最高的美國州,平均薪資介于10萬美元至14萬美元之間。

同樣,根據(jù)經(jīng)驗,JavaScript開發(fā)人員的工資差別很大:美國的專業(yè)JavaScript開發(fā)人員平均可賺取10萬美元,英國則可賺取6萬美元左右。

美國和英國的平均初級,中級和高級JavaScript開發(fā)人員工資

Go:堅固的技術(shù)堆棧為復(fù)雜的物聯(lián)網(wǎng)網(wǎng)絡(luò)提供動力

Go是一款開源編程語言,由Google創(chuàng)建。盡管它不能像語言那樣擁有同樣廣泛的用途,但我們之前專注于這一點,它是在您的物聯(lián)網(wǎng)系統(tǒng)內(nèi)建立通信層的強大技術(shù)。

Go語言關(guān)于物聯(lián)網(wǎng)的主要優(yōu)勢是并發(fā)性和同時運行多個進程(數(shù)據(jù)輸入和輸出)的能力。這使得構(gòu)建由多個傳感器和設(shè)備組成的復(fù)雜IoT網(wǎng)絡(luò)變得更加容易。

雖然它已被評為美國最高收入技術(shù)(根據(jù)最新的StackOverflow開發(fā)者調(diào)查),但美國的Go平均薪水相當(dāng)平穩(wěn) - 約為73,000美元,而英國則為43,000美元。

根據(jù)最近的調(diào)查顯示,由于全球Go開發(fā)者工資數(shù)據(jù)不足,我們將重點關(guān)注美國和英國這些Go開發(fā)者人數(shù)最多的國家的薪水。

在美國和英國的平均Go開發(fā)者工資。來源:Payscale

高技能的Go開發(fā)者在美國可以獲得高達14萬美元的收入 - 幾乎是初級Go程序員的三倍,是英國高級Go開發(fā)者的兩倍。

在美國和英國的平均初級,中級和高級Go開發(fā)人員工資

結(jié)論

正如我們所看到的,物聯(lián)網(wǎng)中最熱門編程語言的開發(fā)人員的工資差別很大,并且取決于許多關(guān)鍵方面。為了理解這些信息,重要的是要看到更大的空間,并能夠識別現(xiàn)有的市場趨勢。

以上由物聯(lián)傳媒提供,如有侵權(quán)聯(lián)系刪除

網(wǎng)頁名稱:go語言開發(fā)iot go語言開發(fā)web
新聞來源:http://muchs.cn/article22/hjcgjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、云服務(wù)器域名注冊、網(wǎng)站營銷網(wǎng)站設(shè)計、搜索引擎優(yōu)化

廣告

聲明:本網(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)

微信小程序開發(fā)