person.proto
//使用哪个版本来解析该文件syntax = "proto3";//编译后,使用person.xxxx,就可以调用package person;//以go.mod为基准,找到本文件路径,最后一个person为别名//在使用编译后的文件导入时,就会用到这个路径和别名option go_package = "protobuf_test/pb/person;person";//导入其他包,方便使用其他包里的东西。引入了其他的包就需要在编译时也要加上其他的包import "home/home.proto";//建结构体,这种结构体可嵌套,可递归。这个结构体生成后可去观察到底生成了什么样子message Person{ //1,2,3这些都是序号占位,这个文件语法先写类型后写名称 string name = 1; int32 age = 2; //枚举申明 enum SEX{ WOMAN = 0; MAN = 1; }; SEX sex = 3; //切片申明 repeated string test_slice = 4; //map申明 map<string, string> test_map = 5; //申明保留字段,别人不可使用 reserved "key", "value"; //保留占位符 reserved 100; //oneof属性,只有一个有值,其他的会被清空,不能用作数组 home.Home myhome = 6;}//服务中对外的方法,客户端使用这个文件,也可以知道有哪些方法可以调用service SearchService{ rpc Search(Person) returns (Person);//传统型的,即刻响应请求的 rpc SearchStream(stream Person)returns(stream Person);//出入参均可为流}
home.proto
syntax = "proto3";package home;option go_package = "protobuf_test/pb/home;home";message Home{ string home_num = 1;}