gRPC in ASP.NET Core 3.x -- Protocol Buffer(2)Go語言的例子(下)


第一篇文章(大約半年前寫的):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的例子就到這了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM