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

第一篇文章(大約半年前寫的):http://www.javashuo.com/article/p-yssafgti-mk.htmlhtml

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

接着上一篇文章。函數

 

寫入到JSON

首先寫一個func:jsonp

在這裏,使用了jsonpb裏面的Marshaler這個struct,這個struct上有一個方法叫作MarshalToString,它能夠把proto.Message類型轉化爲JSON字符串。spa

與此同時,須要添加引用,一般IDE會自動添加該引用。3d

 

而後修改main方法,添加兩行代碼:指針

 

運行 go run main.go:htm

打印到屏幕上到pmStr爲:blog

  

下面查看一下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.cnblogs.com/cgzl/p/12298524.html

相關文章
相關標籤/搜索