【发布时间】:2019-07-16 19:49:23
【问题描述】:
我正在做一个个人项目并第一次使用 Go。我正在使用结构来操作数据并将数据存储在文件中,我使用 proto 作为编码器。
在项目中,我的原型定义看起来像这样
message Data {
string key = 1;
string value = 2;
}
message Record {
int64 size = 1;
Data data = 2;
}
我的结构看起来像这样
type KVData struct {
Key string
Value string
}
目前,这就是我创建原始数据的方式
kvData := KVData{Key: "name", Value: "A"}
record := &pb.Record{
Size: 20,
Data: &pb.Data{Key: "name", Value: "A"},
}
我正在寻找的是一种方法:
record := &pb.Record{
Size: 20,
Data: &((pb.Data)kvData), // Won't work
}
// or like Python
record := &pb.Record{
Size: 20,
Data: &(pb.Data{**kvData}), // Won't work
}
我尝试使用谷歌搜索,但找不到任何解释如何执行此操作的解决方案。
注意,我不只是想解决这个特定的情况,我还想知道在结构和原型之间进行操作的推荐 Go 方式是什么(仅使用 proto?)?
【问题讨论】:
-
kvData.(pb.Data) -
得到这个
invalid type assertion: kvData.(pb.Data) (non-interface type KVData on left) -
抱歉搞混了,
pb.Data(kvData) -
现在,
cannot convert kvData (type KVData) to type pb.Data失败了 -
仅供参考...消息
Record的protobuf 字段编号可能应该是1和2- 而不是3和4。消息Record独立于消息Data- 因此它们的字段编号是独立的。如果您要取消字段值以实现向后兼容性,则只需从较晚的数字开始。
标签: go struct protocol-buffers proto