返回顶部
首页 > 资讯 > 精选 >如果值为 false,gRPC 不会返回布尔值
  • 324
分享到

如果值为 false,gRPC 不会返回布尔值

overflow标准库 2024-02-10 09:02:31 324人浏览 薄情痞子
摘要

PHP小编百草在介绍grpc的使用时指出,如果在grpc请求中,指定的值为false,那么gRPC将不会返回布尔值。这意味着在使用gRPC时,我们需要注意如何处理返回值,以免造成混淆和

PHP小编百草在介绍grpc的使用时指出,如果在grpc请求中,指定的值为false,那么gRPC将不会返回布尔值。这意味着在使用gRPC时,我们需要注意如何处理返回值,以免造成混淆和错误。了解这个细节将帮助我们更好地理解和应用gRPC的功能,提高我们的编程效率和代码质量。让我们一起深入研究gRPC的更多特性和用法,为我们的项目带来更好的性能和扩展性。

问题内容

func (m *todoserver) gettodos(ctx context.context, empty *emptypb.empty) (*desc.gettodosresponse, error) {
    todos, err := m.todoservice.gettodos()
    if err != nil {
        return nil, err
    }

    todosresp := make([]*desc.gettodosresponse_todo, 0, len(todos))
    for _, todo := range todos {
        todosresp = append(todosresp, &desc.gettodosresponse_todo{
            id:          todo.id,
            title:       todo.title,
            iscompleted: todo.iscompleted,
        })
    }

    return &desc.gettodosresponse{todos: todosresp}, nil
}
service TodoService {
    rpc GetTodos(Google.protobuf.Empty) returns (GetTodosResponse) {}
}

message GetTodosResponse {
    repeated Todo todos = 1;
    message Todo {
        int64 id = 1;
        string title = 2;
        bool is_completed = 3;
    }
}
service TodoService {
    rpc GetTodos(google.protobuf.Empty) returns (GetTodosResponse) {}
}

message GetTodosResponse {
    repeated Todo todos = 1;
    message Todo {
        int64 id = 1;
        string title = 2;
        bool is_completed = 3;
    }
}

我在数据库中有一条记录 |编号 |标题 |已完成 | |-|-|-| | 1 |啊啊|假|

上面的函数返回 {"todos": [{"id": "1", "title": "aaa"}]} 但一旦我将 is_completed 更改为 true ,结果是正确的 {"todos ": [{"id": "1", "title": "aaa", "iscompleted": true}]}

解决方法

这是设计使然,也是为了提高效率。

bool 的“零”值是 false - 因此,当使用 false 值初始化 protobuf 结构时,在使用标准库的 encoding/JSON 解组器时不需要显式声明该字段。在编码端,如果字段的 json 标记包含 omitempty 限定符,则标准库的 encoding/json 封送拆收器将删除任何零值 - 这就是您所看到的。 如果 title 字符串字段是 "" (即字符串的零值),您将看到相同的行为。

查看生成的代码(*.pb.go),结构体的 bool 字段定义将如下所示:

type todo struct {
    // ...
    iscompleted  bool  `protobuf:"varint,5,opt,name=is_complete,proto3" json:"is_complete,omitempty"`
}

因此 json:"...,omitempty" 指示 encoding/json 封送拆收器在使用这些标签进行封送期间省略任何零值。

如果您想覆盖此行为:

  • 可以从生成的代码中删除 omitempty 指令(不推荐 - 因为需要在开发的生命周期中管理编辑)。但如果您必须这样做,请参阅此答案;
  • 如果使用 grpc-gateway,请在运行时覆盖它,例如
gwmux := runtime.newservemux(runtime.withmarshaleroption(runtime.mimewildcard, &runtime.jsonpb{origname: true, emitdefaults: true}))
  • 或者,如果自己导出 json,则不使用标准库 (encoding/json),而是使用此包中的 json 封送拆收器 "google.golang.org/protobuf/encoding/protojson":
protojson.Marshaler{EmitDefaults: true}.Marshal(w, resp)

如此答案中所述。

以上就是如果值为 false,gRPC 不会返回布尔值的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 如果值为 false,gRPC 不会返回布尔值

本文链接: https://lsjlt.com/news/562969.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如果值为 false,gRPC 不会返回布尔值
    php小编百草在介绍gRPC的使用时指出,如果在gRPC请求中,指定的值为false,那么gRPC将不会返回布尔值。这意味着在使用gRPC时,我们需要注意如何处理返回值,以免造成混淆和...
    99+
    2024-02-10
    overflow 标准库
  • openssl_get_privatekey返回值为空 false
    一、 问题 使用openssl_get_privatekey() 返回值为空 二 、 解决 我原本的peivate_key的内容是这样子的,一个字符串,没有任何格式: $privateKey = 'A...
    99+
    2023-09-28
    php 开发语言
  • python如何返回布尔值
    这篇文章主要为大家展示了“python如何返回布尔值”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何返回布尔值”这篇文章吧。返回布尔值有时我们必须通过检查某些参数的条件来返回布尔值...
    99+
    2023-06-27
  • PHP 函数如何返回布尔值?
    php 函数通过返回布尔值来表示操作是否成功,例如 empty() 函数检查变量是否为空,返回 true 或 false。其他常见返回布尔值的 php 函数包括 is_array()(检...
    99+
    2024-04-10
    php 布尔值
  • javascript中布尔值视为false的情况有哪些
    这篇文章主要介绍“javascript中布尔值视为false的情况有哪些”,在日常操作中,相信很多人在javascript中布尔值视为false的情况有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用...
    99+
    2024-04-02
  • js如何将值转为布尔值
    小编给大家分享一下js如何将值转为布尔值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!值转为布尔值在JavaScript中,以下值都会在布尔值转化时转化为fals...
    99+
    2023-06-05
  • 哪些 PHP 函数可以返回布尔值?
    php 提供多种函数返回布尔值,包括:boolval():将值转换为布尔值。is_bool():检查值是否是布尔值。empty():检查值是否为空。isset():检查变量是否已定义且已...
    99+
    2024-04-20
    php 布尔值
  • 解决SpringBoot返回结果如果为null或空值不显示处理问题
    SpringBoot返回结果如果为null或空值不显示处理 第一种方法:自定义消息转换器 @Configuration public class WebMvcConfig ext...
    99+
    2024-04-02
  • php如何将数值转换为布尔类型
    本篇内容介绍了“php如何将数值转换为布尔类型”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!转换:1、使用双重逻辑非运算符,语法“!!需要转...
    99+
    2023-06-22
  • js如何使用 !! 将数字转为布尔值
    这篇文章主要介绍了js如何使用 !! 将数字转为布尔值,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用 !! 将数字转为布尔值所有非0的值都是true,包括负数、浮点数:c...
    99+
    2023-06-27
  • Javathread.isInterrupted()返回值不确定结果分析解决
    目录一、代码二、分析结果三、解决方案一、代码 先上代码(以下这段代码会有多种执行结果) @Test public void test_interrupted_thread() thr...
    99+
    2022-12-14
    Java thread.isInterrupted() Java thread.isInterrupted() 返回值
  • 如何解决SpringBoot返回结果如果为null或空值不显示处理问题
    这篇文章主要介绍如何解决SpringBoot返回结果如果为null或空值不显示处理问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SpringBoot返回结果如果为null或空值不显示处理第一种方法:自定义消息转换...
    99+
    2023-06-20
  • 如何将 MySQL 表中的列值作为一组值返回?
    借助MySQL的MAKE_SET()函数,我们可以将MySQL表中的列值作为一组值返回。为了理解它,我们以Student_Name表为例,其中包含以下数据−mysql> Select * from Student_N...
    99+
    2023-10-22
  • C++ 函数如何返回引用或指针作为返回值?
    c++++ 函数可以通过以下方式返回引用或指针作为返回值:返回引用:使用 '&' 作为返回类型,允许函数修改调用者对象的值。返回指针:使用 '*'' 作为返回类型,允许函...
    99+
    2024-04-13
    指针 引用 c++
  • Redshift 返回 uint8 而不是整数,它们之间的转换会返回错误的值
    哈喽!大家好,很高兴又见面了,我是编程网的一名作者,今天由我给大家带来一篇《Redshift 返回 uint8 而不是整数,它们之间的转换会返回错误的值》,本文主要会讲到等等知识点,希望大家一起学习...
    99+
    2024-04-05
  • springboot中如何利用fastjson处理返回值为null的属性值
    本篇内容主要讲解“springboot中如何利用fastjson处理返回值为null的属性值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot中如何利用fastjson处理返回值...
    99+
    2023-06-08
  • java 字段值为null,不返回该字段的问题
    目录java字段值为null,不返回该字段类上打注解不让null值返回前端第一种方法第二种方法java字段值为null,不返回该字段 类上打注解 @JsonSerialize(inc...
    99+
    2024-04-02
  • 如果列中还存储了一些 NULL 值,MySQL COUNT() 函数会返回什么?
    当我们使用 MySQL COUNT() 函数对存储在也存储了一些 NULL 值的列中的值进行计数时,MySQL 会忽略 NULL 并仅返回非 NULL 值的结果。为了理解它,我们使用表“Employee”中的数据,如下所示 -mysql&g...
    99+
    2023-10-22
  • 如果我使用返回多行的语句为 MySQL 用户变量赋值,会发​​生什么情况?
    万一,如果我们使用返回多行的语句为用户变量赋值,那么最后一行的值将保存在该用户变量中,因为用户变量可以保存只有单一值。在下面的示例中,我们使用表“Tender”中的数据,将展示它 -示例mysql> select * fro...
    99+
    2023-10-22
  • ajax请求后台收不到返回值如何解决
    这篇文章将为大家详细讲解有关ajax请求后台收不到返回值如何解决,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、async值为true (异步)当ajax发送请求后,在等待server端返...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作