linux下go protobuf使用简介

获取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)
}

猜你喜欢

转载自blog.csdn.net/lsccsl/article/details/121129426