1.下载对应zip包, 解压 https://github.com/protocolbuffers/protobuf/releases-2. 配置环境变量: 在用户系统变量Path最后添加刚刚解压的bin目录,例如: G:\soft\protobuf\bin-3. 验证是否配置正确: 打开终端,输...

- 1.下载对应zip包, 解压
https://github.com/protocolbuffers/protobuf/releases
-2. 配置环境变量:
在用户系统变量Path最后添加刚刚解压的bin目录,例如: G:\soft\protobuf\bin
-3. 验证是否配置正确:
打开终端,输入protoc,如果输出下面内容,代码配置成功。
-
4.安装protoc-gen-go库
在此之前要设置go的环境变量: -
GO111MODULE=on
-
GOPROXY=https://goproxy.cn,direct
然后:
go get github.com/golang/protobuf/protoc-gen-go -
5.定义test.proto文件, 输入下面数据 :
syntax = "proto3"; //proto版本信息
package test; //定义属于哪个包
//如果报waring就加上这个,不加也能成功
// ./aaa - 表示生成的go文件的存放地址,会自动生成目录的
// test - 表示生成的go文件所属的包名
option go_package = "./aaa;test";
//message是固定格式,表示消息, Order是数据对象的名
// required - 必填项, optional - 选填项, 这两个是proto2的参数,在proto3取消了
// = 1, = 2, = 3是字段的顺序, 为了保证数据顺序的统一
message Order{
int32 order_id = 1;
int64 num = 2;
name = 3;
}
-
6.进入test.proto所在路径, 编译proto文件
.指的是编译后的文件路径, 这里使用当前路径就行,具体路径在proto文件里面定义了
test.proto指要编译的文件
注意 = 后面不能有空格
protoc --go_out =. test.proto -
7.使用上面生成的 test.pb.go文件进行数据封包和拆包
func main(){
fmt.Println("hey_wei_gou")
//创建消息对象
msg_test := &test.Order{
OrderId: *proto.Int32(12),
Num: *proto.Int64(22),
Name: *proto.String("fuck"),
}
//序列化
msgDataEncoding,err := proto.Marshal(msg_test)
if err!=nil{
fmt.Println("err:",err.Error())
panic(err)
return
}
//反序列化
msgEmpty := test.Order{}
err = proto.Unmarshal(msgDataEncoding,&msgEmpty)
if err!=nil{
fmt.Println("err:",err.Error())
panic(err)
return
}
fmt.Println("order_id:",msgEmpty.GetOrderId())
fmt.Println("num:",msgEmpty.GetNum())
fmt.Println("name:",msgEmpty.GetName())
}
本文标题为:golang-protobuf配置和使用


- Ruby on Rails在Ping ++ 平台实现支付 2023-07-22
- 汇编语言程序设计之根据输入改变屏幕颜色的代码 2023-07-06
- Ruby 迭代器知识汇总 2023-07-23
- Ruby的字符串与数组求最大值的相关问题讨论 2023-07-22
- Go Web开发进阶实战(gin框架) 2023-09-06
- R语言-如何切换科学计数法和更换小数点位数 2022-11-23
- R语言关于二项分布知识点总结 2022-11-30
- Swift超详细讲解指针 2023-07-08
- Golang http.Client设置超时 2023-09-05
- R语言绘图数据可视化pie chart饼图 2022-12-10