go_protobuf安装使用下载
匹配环境变量
下载protobuf的golang支持库,安装protoc-gen-go
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
并且把插件的exe文件也放到go的bin目录。实际上我的插件文件被下载到了windows用户目录下的个人电脑名称目录下的go文件夹
C:\Users\TH\go\bin
案例演示
syntax = "proto3";
package hello;
option go_package="protobuf-test/pb";
// struct HelloRequest {
// value string
// }
/*
sdfsf
*/
// message --> 多语言
message HelloRequest {
// 类型是string, 字段的名称 value, 字段的编号: 1
string value = 1;
// 类型是string, 字段的名称 value, 字段的编号: 1
string value2 = 2;
}
enum STATUS {
DRAFT = 0;
PUBLISHED = 1;
}
message BlogSet {
int64 total = 1;
// repeated Blog Blog的数组
repeated Blog items = 2;
}
message Blog {
// id --> Id
int64 id = 1;
// 内容
string content = 2;
// 博客标签
map<string,string> lables = 3;
}
message AlertEvent {
string name = 1;
}
message OperateEvent {
string name = 1;
}
message Event {
oneof data {
AlertEvent alert = 1;
OperateEvent operate = 2;
}
}
终端执行命令
PS F:\gocode\test\protobuf> protoc -I=pb --go_out=. --go_opt=module="protobuf-test" pb/hello.proto
参数解析:
protoc
这是 Protocol Buffers 编译器,用于将
.proto文件编译成目标语言代码(这里是 Go)。
-I=pb(等同于--proto_path=pb)
-I指定 proto 文件的搜索路径,即pb/目录。这表示
hello.proto文件相对于pb/目录查找,编译器会在pb/目录中解析import的.proto文件。
--go_out=.
生成 Go 代码 并输出到当前目录
.。
--go_out是protoc-gen-go插件的选项,告诉protoc生成 Go 代码。
--go_opt=module="protobuf-test"
pb/hello.proto
这是要编译的
.proto文件,路径相对于当前目录。
假设你的项目结构如下:
project/ ├── pb/ │ ├── hello.proto └── main.go在
project/目录下运行:protoc -I=pb --go_out=. --go_opt=module=protobuf-test pb/hello.proto
会在
project/目录下生成:project/ ├── pb/ │ ├── hello.proto │ ├── hello.pb.go # 生成的 Go 代码
测试用例
package pb_test
import (
"google.golang.org/protobuf/proto"
"protobuf-test/pb"
"testing"
)
func TestHelloRequest(t *testing.T) {
ins := &pb.HelloRequest{Value: "Stangj"}
t.Log(ins)
data, err := proto.Marshal(ins)
if err != nil {
t.Fatal(err)
}
t.Log(data)
ins2 := &pb.HelloRequest{}
err = proto.Unmarshal(data, ins2)
if err != nil {
t.Fatal(err)
}
t.Log(ins2)
}
func TestEvent(t *testing.T) {
ins := &pb.Event{Data: &pb.Event_Operate{}}
t.Log(ins)
ins.GetOperate()
}





文章评论