首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Protobuf/Go不能将文字*(类型*)用作数组或片文本中的类型*

Protobuf/Go不能将文字*(类型*)用作数组或片文本中的类型*
EN

Stack Overflow用户
提问于 2020-03-18 06:43:34
回答 1查看 1.9K关注 0票数 1

我在生成的proto文件中有一个类似于以下(简化)的结构:

代码语言:javascript
复制
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"`
}

我想把它记在我的围棋档案里

代码语言:javascript
复制
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行得到了这个错误:

代码语言:javascript
复制
cannot use recordpb.Record literal (type recordpb.Record) as type *messagepb.MessageRequest in array or slice literal

如果有用的话,这是我的messagepb

message.proto

代码语言:javascript
复制
message MessageRequest { recordpb.Record records = 1; }

message.pb.go

代码语言:javascript
复制
type MessageRequest struct {
    Record               *recordpb.Record `protobuf:"bytes,1,opt,name=record,proto3" json:"record,omitempty"`
}

我找不到任何有用的东西来解释为什么会这样.有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-18 08:22:42

看起来您正在创建[]*messagepb.MessageRequest的一个片段,然后向其中添加一个recordpb.Recordrecordpb.Record*messagepb.MessageRequest的类型不同。

给出这种类型

代码语言:javascript
复制
type MessageRequest struct {
    Record *recordpb.Record `protobuf:"bytes,1,opt,name=record,proto3" json:"record,omitempty"`
}

看起来您的msgs变量应该是

代码语言:javascript
复制
msgs := []*messagepb.MessageRequest{
    {
        Record: &recordpb.Record{
            Field1: 1,
            Field2: []byte{byte('a')},
        },
    },
}

@mkopriva在上面的评论中添加了一些很好的解释。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60734618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档