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

2020年02月12日 阅读数:149
这篇文章主要向大家介绍gRPC in ASP.NET Core 3.x -- Protocol Buffer(2)Go语言的例子(上),主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

上一篇文章(大约半年前写的):https://www.cnblogs.com/cgzl/p/11246324.htmlphp

创建Go项目

在GOPATH的src下面创建一个文件夹 protobuf-go,而后在里面执行命令
go mod init github.com/solenovex/protobuf-go

这个命令是用来初始化go module的。
命令执行后在该目录生成go.mod文件,其内容以下:
其实直接执行go mod init 也行,默认会取当前文件夹的名字做为项目名。
 
若是你使用的是Goland,那么须要启用Go modules集成:
 
而后咱们须要安装Protocol buffer的 Go 支持库:
go get -u github.com/golang/protobuf/protoc-gen-go

安装好以后:
下面会出现require github.com/…. 后边显示indirect,说明咱们的代码尚未对其进行直接引用

 
创建main.go,代码以下:
 
而后执行命令 go run main.go 若是输出 "hello world!" 就说明一切正常。

 

创建proto

在项目下创建src/first文件夹,在里面创建person.proto文件:
 
下面须要经过这个proto文件,生成go的代码,命令行执行:
protoc --proto_path src/ --go_out=src/ src/first/person.proto
 
执行完以后,在src/first文件夹下会生成一个文件person.pb.go:
 
咱们看一下这个文件里的PersonMessage 这个struct:
这里面前4个属性就是proto文件里面定义的那4个属性,每一个属性后边都跟着一个字符串tags,它里面提供了一些反射须要的信息。

例如id属性后边这个:
它表示:
  • 针对protocol buffer转换,它的类型是varint,tag为1,opt应该是proto2里面遗留下来的东西不用去管,名子为id,协议是proto3.
  • 针对json序列化,它的名为id,omitempty大概能够理解为若是值为该类型的默认值,那么id这个key就会被忽略掉。
      
该文件里面的其他内容我就不介绍了,可是注意,这个文件不能够修改!

 

使用proto生成的代码

在main.go里面创建一个新的函数NewPersonMessage,而后main函数调用它: