登录
首页 >  Golang >  Go问答

默认值在Golang gRPC中的应用

来源:stackoverflow

时间:2024-03-14 16:33:28 178浏览 收藏

哈喽!今天心血来潮给大家带来了《默认值在Golang gRPC中的应用》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

给出以下 protobuf 定义:

message MyMessage {
    string Foo = 1;
    int From = 2;
    int To = 3;
}

然后我有一个情况,我只想从客户端发送 foo 字符串,没问题。 问题出现在服务器中,我想知道 from 和 to 是否有值(unix 时间戳)。 如果客户端没有显式设置该值,那么 go 会将该值设置为 0,这是一个完全有效的 unix 时间戳。此时,我不知道客户是否打算给我 1970-01-01 00:00:00 或者是否打算将其留空。

我可以添加两个布尔值来表示客户端是否设置了 from 和 to,但我觉得应该有比这更优雅的解决方案。

有没有办法真正查明客户端是否打算发送空值,或者是否实际上将值设置为 0?对于字符串等的 "" 也是如此。


解决方案


您无法区分缺失字段和 proto3 中设置为默认值的字段。这是设计使然。引用Issue 1606中的xfxyjwf:

  • 删除 proto3 中字段存在的基本原理:

    • proto2 中字段的存在导致了混乱,并且使语义变得复杂,例如一 必须区分缺勤字段和设置为默认值的字段;用户通常 在访问不必要的字段之前检查是否存在。我们相信在大多数情况下, 不需要现场存在信息。

    • 消除现场存在使 Proto3 更容易通过开放结构实现 表示,如 Android Java (go/nano-proto) 或 Go 等语言。越容易 实施反过来又可以让外部实施者社区更好地访问它。

  • 如果明确需要此类存在信息,则有多种解决方法,例如包装器,显式的 has_field 布尔值。如果向后兼容 proto2 可选,也可以使用 Oneof 需要字段。

终于介绍完啦!小伙伴们,这篇关于《默认值在Golang gRPC中的应用》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>