内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

go語(yǔ)言的rpc結(jié)果 go語(yǔ)言rpc框架

golang之大端序、小端序

當(dāng)分別處于大小端模式下的內(nèi)容存放如下

成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司是一家服務(wù)多年做網(wǎng)站建設(shè)策劃設(shè)計(jì)制作的公司,為廣大用戶提供了成都網(wǎng)站建設(shè)、成都做網(wǎng)站,成都網(wǎng)站設(shè)計(jì),一元廣告,成都做網(wǎng)站選成都創(chuàng)新互聯(lián)公司,貼合企業(yè)需求,高性價(jià)比,滿足客戶不同層次的需求一站式服務(wù)歡迎致電。

(1)大端模式存儲(chǔ)(存儲(chǔ)地址為16位)

地址 數(shù)據(jù)

0x0004(高地址) 0x44

0x0003 0x33

0x0002 0x22

0x0001(低地址) 0x11

(2)小端模式存儲(chǔ)(存儲(chǔ)地址為16位)

地址 數(shù)據(jù)

0x0004(高地址) 0x11

0x0003 0x22

0x0002 0x33

0x0001(低地址) 0x44

在前面也簡(jiǎn)單闡述了大小端序的定義并結(jié)合簡(jiǎn)單實(shí)例來(lái)說(shuō)明,接下來(lái)會(huì)給出詳細(xì)實(shí)例來(lái)說(shuō)明:

1、大端序(Big-Endian):或稱大尾序

一個(gè)類型: int32 的數(shù) 0X0A0B0C0D的內(nèi)存存放情況

數(shù)據(jù)是以8bits為單位

2、小端序(little-endian):或稱小尾序

比如0x00000001

大端序:內(nèi)存低比特位 00000000 00000000 00000000 00000001 內(nèi)存高比特位

小端序:內(nèi)存低比特位 10000000 00000000 00000000 00000000 內(nèi)存高比特位

其實(shí)在前面羅列出那么東西,最終是為了接下來(lái)講述的在golang中涉及到網(wǎng)絡(luò)傳輸、文件存儲(chǔ)時(shí)的選擇。一般來(lái)說(shuō)網(wǎng)絡(luò)傳輸?shù)淖止?jié)序,可能是大端序或者小端序,取決于軟件開(kāi)始時(shí)通訊雙方的協(xié)議規(guī)定。TCP/IP協(xié)議RFC1700規(guī)定使用“大端”字節(jié)序?yàn)榫W(wǎng)絡(luò)字節(jié)序,開(kāi)發(fā)的時(shí)候需要遵守這一規(guī)則。默認(rèn)golang是使用大端序。詳情見(jiàn)golang中包encoding/binary已提供了大、小端序的使用

輸出結(jié)果:

16909060 use big endian:

int32 to bytes: [1 2 3 4] ### [0001 0002 0003 0004]

bytes to int32: 16909060

16909060 use little endian:

int32 to bytes: [4 3 2 1] ### [0004 0003 0002 0001]

bytes to int32: 16909060

在RPCX框架中關(guān)于RPC調(diào)用過(guò)程涉及的傳遞消息進(jìn)行編碼的,采用的就是大端序模式

Go 的大門已經(jīng)打開(kāi),來(lái)吧

Go 在 10 年間已經(jīng)快速的成為了非常流行并且成功的系統(tǒng)編程語(yǔ)言。

在 Go 之前,C、C++ 、Java 還有 C# 在編程界都是大腕。Go 直到今天還是一個(gè)嬰兒,但是它卻為你而來(lái)。

它為開(kāi)源軟件打開(kāi)了一個(gè)新的世界。這樣一個(gè)完美的語(yǔ)言來(lái)的正是時(shí)候,它引發(fā)了一場(chǎng)計(jì)算的新時(shí)代。所有的這些知名的軟件都是用 Go 編寫的:

Cloud Native 將不可能拋棄 Go , Cloud Native Computing Foundation (CNCF 基金會(huì))同樣也不會(huì)。這僅僅是個(gè)開(kāi)始。Go 也接管了其它部分開(kāi)源軟件,更別提那些大公司內(nèi)部的的基礎(chǔ)設(shè)施。

實(shí)際上,這就是為什么在開(kāi)源項(xiàng)目(或其他項(xiàng)目)上大家傾向選擇使用 Go 來(lái)構(gòu)建產(chǎn)品系統(tǒng)和大型系統(tǒng)。

大家都在 Go playground (譯者注:一個(gè)Golang的在線編輯網(wǎng)站) 上開(kāi)始嘗試 Go 語(yǔ)言。你只需要打開(kāi)一個(gè)網(wǎng)站,寫一些代碼,然后運(yùn)行。無(wú)需安裝,在哪都能開(kāi)始寫代碼,這是一個(gè)不錯(cuò)的體驗(yàn)。

然后你去下載一個(gè) toolchain (譯者注:工具鏈,一般指的就是編譯工具)—— 一個(gè)二進(jìn)制 go 文件。你可以通過(guò)運(yùn)行 go build 命令來(lái)獲一個(gè)生產(chǎn)級(jí)別的軟件。無(wú)需學(xué)習(xí) GCC toolchain ,C 語(yǔ)言,Linux ,共享對(duì)象,JVM 或其它相關(guān)技術(shù)。

不管你在開(kāi)發(fā)什么,你只需專注開(kāi)發(fā)的業(yè)務(wù),而不是你需要哪些工具。Go已經(jīng)為你解決了相應(yīng)的工具了。

在以前的時(shí)代,編譯代碼后,你不能僅僅只是運(yùn)行它,因?yàn)樗蕾囅到y(tǒng)上的其他組件:如 共享對(duì)象、JVM 等。

go build 會(huì)輸出一個(gè)可執(zhí)行的二進(jìn)制文件。將它發(fā)送到你的服務(wù)器上。它之所以能運(yùn)行是因?yàn)橐呀?jīng)將所需要的東西都編譯進(jìn)去了。 這個(gè)簡(jiǎn)單的案例展示了它的強(qiáng)大。好消息是你的部署過(guò)程將比以前簡(jiǎn)單的多?!?僅需要將二進(jìn)制文件傳送到你的服務(wù)器即可。 你甚至可以通過(guò)少量的環(huán)境變量在不同的系統(tǒng)上構(gòu)建。這個(gè)特性非常適合 CLIs (譯者注:命令行工具)以下是最成功的幾個(gè)案例:

云已經(jīng)不是什么新東西了,它是一個(gè)標(biāo)準(zhǔn)。虛擬化和容器的運(yùn)行與終止沒(méi)有任何通知,數(shù)據(jù)流的來(lái)來(lái)往往是不可靠的,RPC 的發(fā)送與重試也是頻繁的。

當(dāng)下的軟件需要的是能高效而正確的運(yùn)行,它需要并行的操作這些所有的事件??扇蒎e(cuò)的分布式架構(gòu)在今天也是一個(gè)標(biāo)配了。

現(xiàn)在你可以獲得一個(gè)簡(jiǎn)單易懂的內(nèi)置基本操作。 Goroutines 和 channels 是有意義的,因?yàn)樗7碌氖钦鎸?shí)的情況。

你只需要在一個(gè)函數(shù)前加上 go 關(guān)鍵字,它就會(huì)以并發(fā)的方式運(yùn)行。你可以很容易的理解這些并發(fā)功能,并且可以專注你的業(yè)務(wù)開(kāi)發(fā)。是否看到了一個(gè)趨勢(shì)?

Go 是一個(gè)無(wú)鎖的強(qiáng)大的分布式系統(tǒng),因?yàn)閺母旧献尣l(fā)操作更簡(jiǎn)單了。

這就是為什么我們能看到這樣一個(gè)更有彈性,更快速,并且高效利用CPU的軟件。用 Go ,事實(shí)上你可以開(kāi)發(fā)你在研究資料中找到的東西。

關(guān)于 Go 和 系統(tǒng)編程 GC(譯者注:指垃圾回收機(jī)制) 通常是一個(gè)有爭(zhēng)議的話題。

在 C / C++ 中,你可以完全控制內(nèi)存。什么時(shí)候如何分配和釋放內(nèi)存由你來(lái)決定。JVM 則是通過(guò)垃圾回收器這種方式來(lái)取代你的控制。

總的來(lái)說(shuō),GC 很方便,但世上總是有些人不想用它。難啊。

手動(dòng)管理內(nèi)存很難,而且在進(jìn)行并發(fā)時(shí)更難。 在 Go 之前,我們面臨著相互沖突的挑戰(zhàn):我們需要一個(gè)不會(huì)泄漏內(nèi)存或者破壞程序的框架,但是程序員又必須明白這一點(diǎn)。

最后的結(jié)果就是有上百萬(wàn)的庫(kù)以不同的方式進(jìn)行權(quán)衡,迫使讓你的程序以一種獨(dú)特唯一的方式運(yùn)行。

以 Go 的立場(chǎng)來(lái)說(shuō):

Go 是一個(gè)包含 GC 的系統(tǒng)編程語(yǔ)言。這是不會(huì)改變的。

事實(shí)上,GC 已經(jīng)爆炸式的促進(jìn)了 Go 。下面這些是 Go 垃圾回收的邊界情況,可能會(huì)出現(xiàn)一些問(wèn)題。但是很多 看法 都是為了讓它更好的運(yùn)行,默認(rèn) 90% 是這樣。

如果你遇到了 10% 的情況,你可以進(jìn)行一個(gè)新調(diào)優(yōu),甚至比 JVM 垃圾回收調(diào)優(yōu)更簡(jiǎn)單。

Go 標(biāo)準(zhǔn)庫(kù)是最好的商業(yè)庫(kù)之一。它不大但是卻覆蓋了 80% 的常用功能,并且不復(fù)雜卻可以為你完成復(fù)雜的事情。

流行的 Go 包大都是高質(zhì)量的,應(yīng)為它們構(gòu)建在一個(gè)高質(zhì)量的標(biāo)準(zhǔn)庫(kù)上。 比標(biāo)準(zhǔn)庫(kù)更重要的是要理解代碼的思想,它鼓勵(lì)使用 interface 和慣例用法。例如:

這些包通常都認(rèn)同這些或其它一些慣例用法,所以它們能平滑的在一起運(yùn)行。 它們的理念一致,編寫并復(fù)用它們。

正如文章開(kāi)頭所說(shuō),完美的 Go 語(yǔ)言來(lái)得正是時(shí)候。

我已經(jīng)闡述了原因, 我們可以打開(kāi)很多強(qiáng)大的開(kāi)源軟件看看,Go 讓許多事情變得簡(jiǎn)單起來(lái)。

我希望 Go 能繼續(xù)成為其它領(lǐng)域的標(biāo)準(zhǔn)——前端服務(wù)(替代 Rails / Node .js),CLIs (替換許多腳本語(yǔ)言),也許還能替換 GUIs 和 移動(dòng) APP 。

正值 Go 10 周年 ,它快速地崛起了。但下一個(gè) 10 年它的趨勢(shì)是否會(huì)擴(kuò)大10倍。

還是那句話,Go 將成為軟件工程中幾個(gè)大型領(lǐng)域的標(biāo)準(zhǔn)編程語(yǔ)言。

Go語(yǔ)言基礎(chǔ)語(yǔ)法(一)

本文介紹一些Go語(yǔ)言的基礎(chǔ)語(yǔ)法。

先來(lái)看一個(gè)簡(jiǎn)單的go語(yǔ)言代碼:

go語(yǔ)言的注釋方法:

代碼執(zhí)行結(jié)果:

下面來(lái)進(jìn)一步介紹go的基礎(chǔ)語(yǔ)法。

go語(yǔ)言中格式化輸出可以使用 fmt 和 log 這兩個(gè)標(biāo)準(zhǔn)庫(kù),

常用方法:

示例代碼:

執(zhí)行結(jié)果:

更多格式化方法可以訪問(wèn)中的fmt包。

log包實(shí)現(xiàn)了簡(jiǎn)單的日志服務(wù),也提供了一些格式化輸出的方法。

執(zhí)行結(jié)果:

下面來(lái)介紹一下go的數(shù)據(jù)類型

下表列出了go語(yǔ)言的數(shù)據(jù)類型:

int、float、bool、string、數(shù)組和struct屬于值類型,這些類型的變量直接指向存在內(nèi)存中的值;slice、map、chan、pointer等是引用類型,存儲(chǔ)的是一個(gè)地址,這個(gè)地址存儲(chǔ)最終的值。

常量是在程序編譯時(shí)就確定下來(lái)的值,程序運(yùn)行時(shí)無(wú)法改變。

執(zhí)行結(jié)果:

執(zhí)行結(jié)果:

Go 語(yǔ)言的運(yùn)算符主要包括算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、賦值運(yùn)算符以及指針相關(guān)運(yùn)算符。

算術(shù)運(yùn)算符:

關(guān)系運(yùn)算符:

邏輯運(yùn)算符:

位運(yùn)算符:

賦值運(yùn)算符:

指針相關(guān)運(yùn)算符:

下面介紹一下go語(yǔ)言中的if語(yǔ)句和switch語(yǔ)句。另外還有一種控制語(yǔ)句叫select語(yǔ)句,通常與通道聯(lián)用,這里不做介紹。

if語(yǔ)法格式如下:

if ... else :

else if:

示例代碼:

語(yǔ)法格式:

另外,添加 fallthrough 會(huì)強(qiáng)制執(zhí)行后面的 case 語(yǔ)句,不管下一條case語(yǔ)句是否為true。

示例代碼:

執(zhí)行結(jié)果:

下面介紹幾種循環(huán)語(yǔ)句:

執(zhí)行結(jié)果:

執(zhí)行結(jié)果:

也可以通過(guò)標(biāo)記退出循環(huán):

--THE END--

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

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

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

以后端程序?yàn)槔蠖朔?wù)若想連接節(jié)點(diǎn)有兩種可能,一種是雙 方在同一主機(jī),此時(shí)后端連接節(jié)點(diǎn)可以采用 本地 IPC(Inter-Process Communication,進(jìn) 程間通信)機(jī)制,也可以采用 RPC(Remote Procedure Call,遠(yuǎn)程過(guò)程調(diào)用)機(jī)制;另 一種情況是雙方不在同一臺(tái)主機(jī),此時(shí)只能采用 RPC 機(jī)制進(jìn)行通信。

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

接著,我們來(lái)了解一下智能合約運(yùn)行的過(guò)程。

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

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

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

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

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

步驟 01:編譯合約,獲取合約 ABI(Application Binary Interface,應(yīng)用二進(jìn)制接口)。 單擊【ABI】按鈕拷貝合約 ABI 信息,將其粘貼到文件 calldemo.abi 中(可使用 Go 語(yǔ)言IDE 創(chuàng)建該文件,文件名可自定義,后綴最好使用 abi)。

最好能將 calldemo.abi 單獨(dú)保存在一個(gè)目錄下,輸入“l(fā)s”命令只能看到 calldemo.abi 文件,參 考效果如下:

步驟 02:獲得合約地址。注意要將合約部署到 Geth 節(jié)點(diǎn)。因此 Environment 選擇為 Web3 Provider。

在【Environment】選項(xiàng)框中選擇“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 文件,讀者可以打開(kāi)該文件欣賞一下,注意不要修改它。

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

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

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

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

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

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

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

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

網(wǎng)站題目:go語(yǔ)言的rpc結(jié)果 go語(yǔ)言rpc框架
URL網(wǎng)址:http://www.rwnh.cn/article14/dosijge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站設(shè)計(jì)網(wǎng)站收錄、企業(yè)建站、靜態(tài)網(wǎng)站定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
高青县| 沾益县| 上思县| 佛冈县| 屯门区| 思南县| 淄博市| 衡水市| 象州县| 稷山县| 从化市| 常德市| 青川县| 金塔县| 梓潼县| 神池县| 凤阳县| 安陆市| 安福县| 玉林市| 吉木萨尔县| 东平县| 东至县| 隆化县| 手机| 恩施市| 宣城市| 临猗县| 大安市| 东乌珠穆沁旗| 冷水江市| 汨罗市| 花莲县| 贵阳市| 乌鲁木齐县| 阜南县| 新化县| 万盛区| 白朗县| 出国| 高邑县|