我在生成的proto文件中有一个类似于以下(简化)的结构:
type Record struct {
Field1 int64 `protobuf:"varint,1,opt,name=field1,proto3" json:"field1,omitempty"`
Field2 []byte `protobuf:"bytes,2,opt,name=field2,proto3" json:"field2,omitempty"`
}我想把它记在我的围棋档案里
func foo(c messagepb.MessageServiceClient){
fmt.Println("Starting to send message...")
msgs := []*messagepb.MessageRequest{
recordpb.Record{ //error msg here
Field1: 1,
Field2: []byte{byte('a')},
}
}
...
}但是我在recordpb.Record行得到了这个错误:
cannot use recordpb.Record literal (type recordpb.Record) as type *messagepb.MessageRequest in array or slice literal如果有用的话,这是我的messagepb
message.proto
message MessageRequest { recordpb.Record records = 1; }message.pb.go
type MessageRequest struct {
Record *recordpb.Record `protobuf:"bytes,1,opt,name=record,proto3" json:"record,omitempty"`
}我找不到任何有用的东西来解释为什么会这样.有什么想法吗?
发布于 2020-03-18 08:22:42
看起来您正在创建[]*messagepb.MessageRequest的一个片段,然后向其中添加一个recordpb.Record。recordpb.Record与*messagepb.MessageRequest的类型不同。
给出这种类型
type MessageRequest struct {
Record *recordpb.Record `protobuf:"bytes,1,opt,name=record,proto3" json:"record,omitempty"`
}看起来您的msgs变量应该是
msgs := []*messagepb.MessageRequest{
{
Record: &recordpb.Record{
Field1: 1,
Field2: []byte{byte('a')},
},
},
}@mkopriva在上面的评论中添加了一些很好的解释。
https://stackoverflow.com/questions/60734618
复制相似问题