第一篇文章(大約半年前寫的):https://www.cnblogs.com/cgzl/p/11246324.html
gRPC in ASP.NET Core 3.x -- Protocol Buffer(2)Go語言的例子(上)
接著上一篇文章,
寫入到JSON
首先寫一個func:

在這里,使用了jsonpb里面的Marshaler這個struct,這個struct上有一個方法叫做MarshalToString,它可以把proto.Message型別轉化為JSON字串,
與此同時,需要添加參考
,通常IDE會自動添加該參考,
然后修改main方法,添加兩行代碼:

運行 go run main.go:
列印到螢屏上到pmStr為:![]()
下面查看一下jsonpb.Marshaler 的原始碼:
可以看到里面有幾個屬性,它們可以用來配置JSON轉化,
我可以設定縮緊為一個tab:

然后再次執行go程式,結果如下:

而json里的這些屬性名是怎么轉化的呢?打開proto生成的go檔案:

可以看到前4個屬性的tags除了有protobuf的,后邊還有json的,所以生成json的屬性名等資訊就來自這些tags,
從JSON讀取

這里就是使用jsonpb.UnmarshalString這個方法,其余的都很簡單就不解釋了,
運行結果如下:
![]()
列舉的例子
在src下面建立second檔案夾,里面建立enum.proto檔案,

代碼如下:

執行:protoc --proto_path=src/ --go_out=src/ src/second/enum.proto
生成的代碼如下:

go里面沒有列舉型別,所以生成的是const常量,
同時還生成了兩個map:

一個是數值作為key,文字作為value,另一個map正好反過來,
再看一下這個訊息本身的struct:

然后建立一個函式,并在main里面呼叫:

函式回傳的是指標,然后在main函式里使用了Gender_name這個map,通過em.Gender的數值獲取到對應到文字并輸出,
運行結果如下:
![]()
復雜型別
在src下面建立third檔案夾,并建立complex.proto檔案:

可以看到DepartmentMessage里面到employees屬性是EmployeeMessage的一個集合,
而且DepartmentMessage有一個parent_department屬性,它的型別為本身,
執行:protoc --proto_path=src/ --go_out=src/ src/third/complex.proto
可以看到這生成的檔案里面有倆個struct:


然后建立函式,并在main里面呼叫:

注意這里面的指標,
輸出結果是:
![]()
Go的例子就到這了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/40867.html
標籤:Go
上一篇:從零開始搭建Go語言開發環境
下一篇:Go語言 二分查找演算法的實作
