Protobuf/Go 不能在数组或切片文字中使用文字 * (类型 *) 作为类型 *
Protobuf/Go cannot use literal * (type *) as type * in array or slice literal
我在生成的原型文件中有一个结构,看起来像这样(简化):
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"`
}
我正在尝试在我的 Go 文件中调用它
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"`
}
关于为什么会这样,我找不到任何有用的信息...有什么想法吗?
看起来您正在创建 []*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 上面的评论对此做了一些很好的解释。
我在生成的原型文件中有一个结构,看起来像这样(简化):
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"`
}
我正在尝试在我的 Go 文件中调用它
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"`
}
关于为什么会这样,我找不到任何有用的信息...有什么想法吗?
看起来您正在创建 []*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 上面的评论对此做了一些很好的解释。