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