编写.proto文件
//指定的当前proto语法的版本,有2和3
syntax = "proto3";
//option go_package="path:name"; path 表示生成的go文件的存放地址,会自动生成目录的name表示生成的go文件所属包名
option go_package = "demo1/pb";
//指定等会文件生成出来的package (可选参数)
package service;
message Address{
//自身属性
int32 id = 1;
string code = 2;
string name = 3;
}
编译生产go文件:
protoc --go_out=. ./address.proto
protoc --go_out=../service .\address.proto
//protoc --go_out=./service --go-grpc_out=./service .\address.proto
序列化与反序列化:
import (
"xx/internal/pb"
"fmt"
"github.com/golang/protobuf/proto"
"testing"
)
func Test_pb(t *testing.T) {
p := &pb.Address{
Name: "北京",
Code: "20001",
Id: 1234,
}
fmt.Println(p.String())
//序列化的过程
msg, _ := proto.Marshal(p)
//反序列化
p1 := &pb.Address{}
err := proto.Unmarshal(msg, p1)
if err != nil {
panic(err)
}
fmt.Println(p1.String())
fmt.Println(p1.GetId())
fmt.Println(p1.GetCode())
fmt.Println(p1.GetName())
}
网友评论