ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 1.定义一个消息类型 定义一个消息类型的`.proto`文件,如下: ~~~ # search.proto syntax = "proto3"; message SearchRequest { string query = 1; int32 page_number = 2; int32 result_per_page = 3; } ~~~ * `syntax = "proto3";` 指定proto3语法,若不指定默认为proto2,这个声明必须是文件第一行非空注释行。 * `SearchRequest ` 消息定义了三个字段,每个字段包含一段数据,每个字段一个名称和一个类型。 ## 2.标量值类型 | .proto类型 | Go类型 | | --- | --- | | double | float64 | | float| float32 | | int32 | int32 | | int64 | int64 | | uint32 | uint32 | | uint64 | uint64 | | sint32| int32| | sint64| int64| | fixed32| uint32| | fixed64| | | sfixed32| int32| | sfixed64| | | bool| bool| | string | string | | bytes| []byte | ## 3.Go语言使用protoc示例 新建demo项目,项目结构如下: ~~~bash demo └── proto └── book └── price.proto ~~~ **price.proto** ~~~protobuf // proto/book/price.proto syntax = "proto3"; package book; // 声明生成Go代码的导入路径(import path)包名为book option go_package = "demo/proto/book"; message Price { int64 market_price = 1; // 建议使用下划线的命名方式 int64 sale_price = 2; } ~~~ **生成代码** ``` protoc --proto_path=proto --go_out=proto --go_opt=paths=source_relative book/price.proto ``` `--proto_path=proto` 表示从proto目录下读取proto文件 `--go_out=proto` 表示生成的Go代码保存的路径 `--go_opt=paths=source_relative` 表示输出文件与输入文件放在相同的相对目录中 `book/price.proto` 表示在proto目录下的 book/price.proto文件。 ## 4.生成gRPC代码