我正在编写一个简单的客户端服务器来了解 protobuf。
我有以下 message.proto 文件:
syntax = "proto3";
package main;
message Text {
string name = 1;
int32 id = 2;
}
这是客户端的代码(省略错误):
mssg := &Text{Name: "John Doe", Id: 4721}
bytes, _ := proto.Marshal(mssg)
conn, _ := net.Dial(...)
conn.Write(bytes)
在服务器端:
...
message, _ := ioutil.ReadAll(conn)
mssg := Text{}
err = proto.Unmarshal(message, &mssg)
字节通过套接字就好了,但是当我在服务器端调用 Unmarshal 时,我收到以下错误:
恐慌:Text.state 中的 protobuf 标签没有足够的字段:
奇怪的是,如果我在客户端调用 Unmarshal,它就可以正常工作。
我的 protoc 版本是 3.11.2,我安装了它
go get google.golang.org/protobuf/cmd/protoc-gen-go
go install google.golang.org/protobuf/cmd/protoc-gen-go
我创建了 message.pb.go 文件
protoc.exe -I="." --go_out="." message.proto
那么,问题似乎是由于通过套接字发送字节而出现的,但它是具有完全相同值的切片。