请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

CreateContentReq中定义的Content content = 1;其中的数字定义是否有特定意义和要求?

老师,你好!

问题如截图中所示,麻烦及时答疑解惑下,谢谢!

图片描述
另外下面的 repeated Content contents = 2;这种写法,为什么不单独写成 Content contents = 2就好了,而是要加一个 repeated 是起什么作用呢? 不太理解,麻烦答疑下,谢谢!

message FindContentRsp {
// 内容总数
int64 total = 1;
// 内容
repeated Content contents = 2;
}

正在回答 回答被采纳积分+3

1回答

Lucky_ldj 2024-10-09 16:49:04

同学你好,你关注的这个问题非常好哈,这是proto协议的规则。

Content 是字段的名称,表示该字段在消息中的含义。

= 1 是字段的序列号(tag),用于唯一标识该字段。序列号在消息的二进制表示中起着重要作用。


唯一标识:每个字段都有一个唯一的序列号,用于在序列化和反序列化过程中识别字段。序列号在消息的二进制格式中是必需的,因为它们用于标识字段,而不是字段名称。

版本兼容性:使用序列号可以在不破坏向后兼容性的情况下对消息进行版本控制。你可以添加、删除或重命名字段,而只要保持序列号不变,旧版本的代码仍然可以正确解析新版本的消息。

3. 序列化效率:在序列化过程中,protobuf 使用序列号而不是字段名称来减少消息的大小,从而提高传输效率。


序列号在 protobuf 中是非常重要的,它们确保了消息的结构在序列化和反序列化过程中的一致性和效率。通过使用序列号,protobuf 能够在不同版本之间保持兼容性,并有效地传输数据。


repeated :在 Protocol Buffers(protobuf)中,repeated 关键字用于定义一个字段可以包含零个或多个值。这意味着该字段可以是一个数组或列表,允许存储多个相同类型的元素。




0 回复 有任何疑惑可以回复我~
  • 提问者 网络时空 #1
    感谢老师及时回复!
    
    //查找内容请求
    message FindContentReq {
    	// 内容ID
    	int64 id = 1;
    	// 作者
    	string author = 2;
    	// 标题
    	string title = 3;
    	// 页
    	int32 page = 4;
    	// 页大小
    	int32 page_size = 5;
    }
    
    根据您上面的回复,是不是说这个message中的字段,只要给字的序列号值不相同就可以了,是这个意思吗?
    
    message UpdateContentReq {
    	// 内容
    	Content  content = 1;
    }
    
    这种写法,是指UpdateContentReq 中包括当前Content中定义的所有属性字段吗?
    回复 有任何疑惑可以回复我~ 2024-10-09 17:47:04
问题已解决,确定采纳
还有疑问,暂不采纳
Go语法进阶到大厂案例全流程实践
  • 参与学习       177    人
  • 解答问题       41    个

核心语法+微服务化+分布式加工流+立体化监控 带你实战内容库系统

了解课程
意见反馈 帮助中心 APP下载
官方微信