阅读这里:https://github.com/protocolbuffers/protobuf/blob/master/docs/field_presence.md#go-exampleGolang例子:
m := GetProto()
if (m.HasFoo()) {
// Clear the field:
m.Foo = nil
} else {
// Field is not present, so set it.
m.Foo = proto.Int32(1);
}
如果我使用:
protoc pkg/user.proto --go_out=. --go_opt=module=my_app --go-grpc_out=. --go-grpc_opt=module=my_app
与:
syntax = "proto3";
package example;
message MyPlayer {
uint64 id = 1;
optional string description = 2;
uint32 qty = 3;
optional uint64 age = 4;
}
它不会生成任何具有
为什么?
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.26.0
// protoc v3.17.3
如果我使用
MyPlayer
生成的原始字段而不是方法,我错了吗?
例子:
if MyPlayer.description != nil {
description = *MyPlayer.description
}
而不是
description = MyPlayer.GetDescription()
这不是我想要的(我想检测nil值)。
正如这里报道的那样,这些文件是错误的:https://github.com/golang/protobuf/issues/1336:
关于https://github.com/protocolbuffers/protobuf/blob/master/docs/field_presence.md#go-这个例子是不正确的。在proto3中使用“可选”可以像在proto2中一样生成字段。
那个文档是错误的。生成的代码中没有has
方法。通过将字段与nil
进行比较来测试存在性。
正确重写这些示例:
// Field foo does not have presence.
// If field foo is not 0, set it to 0.
// If field foo is 0, set it to 1.
m := GetProto()
if m.Foo != 0 {
// "Clear" the field:
m.Foo = 0
} else {
// Default value: field may not have been present.
m.Foo = 1
}
// Field foo has presence.
// If foo is set, clear it.
// If foo is not set, set it to 1.
m := GetProto()
if m.Foo != nil {
// Clear the field:
m.Foo = nil
} else {
// Field is not present, so set it.
m.Foo = proto.Int32(1)
}
PR修复该文档:协议缓冲区/协议缓冲区#8788
本文向大家介绍在css中为什么说不建议使用@import?相关面试题,主要包含被问及在css中为什么说不建议使用@import?时的应答技巧和注意事项,需要的朋友参考一下 @import 属于 CSS,所以导入语句应写在 CSS 中,要注意的是导入语句应写在样式表的开头,否则无法正确导入外部文件; @import 是 CSS2.1 才出现的概念,所以如果浏览器版本较低,无法正确导入外部样式文件;
问题内容: 我了解到MySQL可以压缩服务器和客户端之间的通信。 如果客户端和服务器均支持zlib压缩,并且客户端请求压缩,则使用压缩。 (来自MySQL Forge Wiki ) 最明显的利弊是 优点:有效载荷尺寸减小 缺点:增加了计算时间 那么,只要我能负担得起具有足够规格的服务器,就应该启用压缩协议吗?我还要考虑其他因素吗? 问题答案: 除了网络带宽和数据库服务器及其客户端之间的延迟之外,性
问题内容: 我有2个线程T1和T2,两者都有不同的工作,因此通常我们更喜欢通过线程Joins完成此任务。 但是我们无需使用join()就可以做到这一点。我们可以在T1线程中添加T2线程的代码。这有什么区别? 问题答案: 主要区别在于,当我们将T2线程与T1连接在一起时,T2执行该任务的时间也可以由T1占用,这意味着它们将并行执行不同的任务。但是,当您在T1中包含T2线程代码时,不会发生这种情况。线
我对Swift中关于var和关键字{get set}的使用的协议有疑问。 来自Apple文档: 这将不是公正的: 我错过了什么?
问题内容: 我已经继承了代码 读为“ HttpClientBuilder的文档似乎很稀疏,只是说: 但是,如果我用该方法替换仍然出现。 如何使用不推荐使用的方法? 问题答案: 不用创建的新实例,而是使用Builder。你会得到一个。 例如用法: 而不是使用,而是使用方法。
HTTP有HTTP cookie。Cookie允许服务器跟踪用户状态、连接数、上次连接等。 HTTP具有持久连接(Keep-Alive),其中可以从同一个TCP连接发送多个请求。