第一篇文章(大約半年前寫的):http://www.javashuo.com/article/p-yssafgti-mk.htmlhtml
gRPC in ASP.NET Core 3.x -- Protocol Buffer(2)Go語言的例子(上) 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。
這裏就是使用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