获取protobuf包
go get github.com/golang/protobuf/proto
go get google.golang.org/protobuf
go get -u github.com/golang/protobuf/protoc-gen-go
下载go代码生成工具
protoc-3.19.1-linux-x86_64.zip
解压 unzip protoc-3.19.1-linux-x86_64.zip
编辑.bashrc文件,将生成工具加入PATH环境变量
export PATH=$PATH:/home/lsc/go/go/bin:/home/lsc/go/gohome/bin:/home/lsc/go/protobuf/bin
/home/lsc/go/gohome/bin: 下载protobuf包protoc-gen-go所在路径
/home/lsc/go/protobuf/bin: 解压protoc-3.19.1-linux-x86_64.zip 后protoc所在路径
生成go代码
protoc --go_out=./ *.proto
.proto文件示例 用option go_package指定包名
syntax="proto3";
package main;
option go_package = "./;main";
enum ClassName
{
class1=0;
class2=1;
class3=2;
}
message Student
{
string name=1;
int32 age=2;
string address=3;
ClassName cn=4;
}
message Students
{
repeated Student person=1;
string school=2;
}
对应的go代码,序列代与反序列化
package main
import (
"fmt"
"github.com/golang/protobuf/proto"
)
func test_protobuf() {
s1 := &Student{}
s1.Name = "test protocal buf parse jz01"
mData, err := proto.Marshal(s1)
if err != nil {
fmt.Println("Error1: ", err)
return
}
fmt.Println("packet data:", mData)
var umData Student
err = proto.Unmarshal(mData, &umData)
fmt.Println("parse:", umData)
}