|
protoc和protoc-go-gen 可以使用我云盘分享的安装包,拷贝到自己的可执行目录下测试, 也可以自己下载编译安装
两种方式如下 1. 直接使用安装包
云盘分享地址: 链接:https://pan.baidu.com/s/1OuqIr3QqBMoDdn8O7fGR-w
提取码:t8er
image.png
2. 自己编译安装
安装protoc
打开 https://github.com/protocolbuffers/protobuf/releases
下载对应的安装包
image.png
解压并拷贝protoc到可执行目录下
如/usr/bin/下
执行protoc, 能看到输出信息表示成功
安装protoc-go-gen
git clone https://github.com/golang/protobuf.gitcd protoc-gen-go/// 编译安装 protoc-gen-go到$GOPATH/bin目录下go install3. 代码测试
编写proto文件
代码见 https://gitee.com/hufengjiu/go-zinx.git
syntax = "proto3";package pb;option go_package = "./mmo_game/pb"; // 生成文件所在目录//message为关键字,作用为定义一种消息类型message Person { string name = 1; //姓名 int32 age = 2; //年龄 repeated string emails = 3; //电子邮件(repeated表示字段允许重复) repeated PhoneNumber phones = 4; //手机号}//enum为关键字,作用为定义一种枚举类型enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2;}//message为关键字,作用为定义一种消息类型可以被另外的消息类型嵌套使用message PhoneNumber { string number = 1; PhoneType type = 2;}
protoc -I ./ --go_out=./ ./mmo_game/pb/*.proto
将会生成person.pb.go文件
image.png
编写main文件进行测试
image.png
执行 go get -v -u github.com/golang/protobuf/protoc-gen-go安装依赖包编写test_person.go文件
package mainimport ( "fmt" "gitee.com/hufengjiu/go-zinx/mmo_game/pb" "github.com/golang/protobuf/proto")func main() { person := &pb.Person{ Name: "小明", Age: 16, Emails: []string{"1234@qq.com", "5678@qq.com"}, Phones: []*pb.PhoneNumber{ &pb.PhoneNumber{ Number: "13113111311", Type: pb.PhoneType_MOBILE, }, &pb.PhoneNumber{ Number: "14141444144", Type: pb.PhoneType_HOME, }, &pb.PhoneNumber{ Number: "19191919191", Type: pb.PhoneType_WORK, }, }, } data, err := proto.Marshal(person) if err != nil { fmt.Println("marshal err:", err) } newPerson := &pb.Person{} err = proto.Unmarshal(data, newPerson) if err != nil { fmt.Println("unmarshal err:", err) } fmt.Println(person) fmt.Println(newPerson)}
- 运行测试 go run test_person.go
结果
name:"小明" age:16 emails:"1234@qq.com" emails:"5678@qq.com" phones:{number:"13113111311"} phones:{number:"14141444144" type:HOME} phones:{number:"19191919191" type:WORK}name:"小明" age:16 emails:"1234@qq.com" emails:"5678@qq.com" phones:{number:"13113111311"} phones:{number:"14141444144" type:HOME} phones:{number:"19191919191" type:WORK}
至此成功 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|