个人备忘录:尝试使用Protocol Buffers3_golang
用Golang调用我写的Protobuf文件看看
文件夹结构。
prootbuf测试
|– go\
| – protoTest.go
|– protobuf\
| – Student.proto
创建用于Golang的protobuf文件
生成protobuf
②创建protobuf
③制作protobuf
切换至\protobuf目录下,文件名为Student.proto。
syntax ="proto3";
message Student {
string name = 1;
int32 age = 2;
}
编译并生成Student.pb.go文件。
protoc –go_out=./ Student.proto
请使用 protoc –go_out=./ Student.proto 命令。
创建一个适用于 protobuf 的 Golang 程序。
切换至上层目录下的”go”文件夹。文件名:protoTest.go。
package main
import (
"練習/protobuf"
"fmt"
"github.com/golang/protobuf/proto"
)
func main() {
text := &Student.Student{
Name: "protobufTest",
Age:20,
}
fmt.Println("Student情報:",text)
// proto Marshal
data, err := proto.Marshal(text)
if err != nil {
return
}
fmt.Println("proto Marshal後:",data)
Stu01 := &Student.Student{}
// proto Unmarshal
err = proto.Unmarshal(data, Stu01)
if err != nil {
return
}
fmt.Println("proto Unmarshal後:",Stu01)
fmt.Println("Unmarshal後の名前取得:",Stu01.Name)
fmt.Println("GetNameでの名前取得:",Stu01.GetName())
}
执行结果
Student情報: name:"protobufTest" age:20
proto Marshal後: [10 12 112 114 111 116 111 98 117 102 84 101 115 116 16 20]
proto Unmarshal後: name:"protobufTest" age:20
Unmarshal後の名前取得: protobufTest
GetNameでの名前取得: protobufTest
Process finished with exit code 0