mirror of
https://github.com/chai2010/advanced-go-programming-book.git
synced 2025-05-24 20:52:22 +00:00
commit
a46395cfdd
@ -22,7 +22,7 @@ message String {
|
||||
|
||||
在XML或JSON等数据描述语言中,一般通过成员的名字来绑定对应的数据。但是Protobuf编码却是通过成员的唯一编号来绑定对应的数据,因此Protobuf编码后数据的体积会比较小,但是也非常不便于人类查阅。我们目前并不关注Protobuf的编码技术,最终生成的Go结构体可以自由采用JSON或gob等编码格式,因此大家可以暂时忽略Protobuf的成员编码部分。
|
||||
|
||||
Protobuf核心的工具集是C++语言开发的,在官方的protoc编译器中并不支持Go语言。要想基于上面的hello.proto文件生成相应的Go代码,需要安装相应的工具。首先是安装官方的protoc工具,可以从 https://github.com/google/protobuf/releases 下载。然后是安装针对Go语言的代码生成插件,可以通过`go get github.com/golang/protobuf/protoc-gen-go`命令按安装。
|
||||
Protobuf核心的工具集是C++语言开发的,在官方的protoc编译器中并不支持Go语言。要想基于上面的hello.proto文件生成相应的Go代码,需要安装相应的工具。首先是安装官方的protoc工具,可以从 https://github.com/google/protobuf/releases 下载。然后是安装针对Go语言的代码生成插件,可以通过`go get github.com/golang/protobuf/protoc-gen-go`命令安装。
|
||||
|
||||
然后通过以下命令生成相应的Go代码:
|
||||
|
||||
@ -30,7 +30,7 @@ Protobuf核心的工具集是C++语言开发的,在官方的protoc编译器中
|
||||
$ protoc --go_out=. hello.proto
|
||||
```
|
||||
|
||||
其中`go_out`参数告知protoc编译器取加载对应的protoc-gen-go工具,然后通过该工具生成代码,生成代码放到当前目录。最后是一系列要处理的protobuf文件的列表。
|
||||
其中`go_out`参数告知protoc编译器去加载对应的protoc-gen-go工具,然后通过该工具生成代码,生成代码放到当前目录。最后是一系列要处理的protobuf文件的列表。
|
||||
|
||||
这里只生成了一个hello.pb.go文件,其中String结构体内容如下:
|
||||
|
||||
@ -57,7 +57,7 @@ func (m *String) GetValue() string {
|
||||
}
|
||||
```
|
||||
|
||||
生成的结构体中有一些以`XXX_`为前缀名字的成员,目前可以忽略这些成员。同时String类型还自动生成了一组方法,其中ProtoMessage方法表示这是一个实现了proto.Message接口的方法。此外Protobuf还为每个成员生成了一个Get方法,Get方法不仅可以处理空指针类型,而且可以和Protobuf第二版的方法保持一致(第二版的自定义默认值特性依赖这类方法)。
|
||||
生成的结构体中有一些以`XXX_`为名字前缀的成员,目前可以忽略这些成员。同时String类型还自动生成了一组方法,其中ProtoMessage方法表示这是一个实现了proto.Message接口的方法。此外Protobuf还为每个成员生成了一个Get方法,Get方法不仅可以处理空指针类型,而且可以和Protobuf第二版的方法保持一致(第二版的自定义默认值特性依赖这类方法)。
|
||||
|
||||
基于新的String类型,我们可以重新实现HelloService:
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user