Google Protocol Buffers (proto3) 中的 DoubleValue 类型用法总结

文章目录

    • 前言
    • DoubleValue 的作用
    • 如何使用 DoubleValue
      • 1. 定义 .proto 文件
      • 2. 设置 DoubleValue 字段的值
      • 3. 检查字段值是否为空,并获取值
      • 3. demo示例

前言

这两天在做相关工作的时候,遇到了一个需要定义optional double 类型的proto字段,因为之前没用过,所以一时之间不知道怎么定义,查找了下相关资料后发现也很简单,就总结一下吧,以备不时之需。

DoubleValue 的作用

Google Protocol Buffers (protobuf) 是一种用于序列化结构化数据的轻量级、高效的数据交换格式。在proto3版本中,提供了一种特殊的包装类型,用于包装基本数据类型,其中就包括 google.protobuf.DoubleValue 类型,用于包装 double 类型的数据。

DoubleValue 的主要作用是在需要可选的 double 类型数据时,提供一种更丰富的表达方式。它可以用于表示一个 double 类型的值,同时允许指定该值是否存在(即可选或缺失的)。这对于处理可能缺失或未设置值的场景非常有意义。

如何使用 DoubleValue

1. 定义 .proto 文件

首先,我们需要在 .proto 文件中定义消息类型,包括 DoubleValue 类型的字段。

protobufCopy codesyntax = "proto3";import "google/protobuf/wrappers.proto";message MyMessage {google.protobuf.DoubleValue my_double_value = 1;
}

2. 设置 DoubleValue 字段的值

我们可以通过以下方式进行设值:

my_message.mutable_my_double_value()->set_value(42.5);

3. 检查字段值是否为空,并获取值

// 检查 DoubleValue 字段是否存在if (deserialized_message.has_my_double_value()) {// 获取 DoubleValue 字段的值double my_double_value = deserialized_message.my_double_value().value();std::cout << "DoubleValue: " << my_double_value << std::endl;} else {std::cout << "DoubleValue is not set." << std::endl;}

3. demo示例

#include <iostream>
#include "your_proto_file.pb.h"int main() {// 创建消息对象MyMessage my_message;// 设置 DoubleValue 字段的值my_message.mutable_my_double_value()->set_value(42.5);// 将消息序列化为字符串std::string serialized_data = my_message.SerializeAsString();// 打印序列化后的数据std::cout << "Serialized Data: " << serialized_data << std::endl;// 反序列化消息MyMessage deserialized_message;deserialized_message.ParseFromString(serialized_data);// 检查 DoubleValue 字段是否存在if (deserialized_message.has_my_double_value()) {// 获取 DoubleValue 字段的值double my_double_value = deserialized_message.my_double_value().value();std::cout << "DoubleValue: " << my_double_value << std::endl;} else {std::cout << "DoubleValue is not set." << std::endl;}return 0;
}

上述代码中,首先创建了一个 MyMessage 对象,设置了其中的 my_double_value 字段,然后将消息序列化为字符串。接着,反序列化该字符串,并检查 my_double_value 字段是否存在,如果存在,则获取其值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/196659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDBC常见的几种连接池使用(C3P0、Druid、HikariCP 、DBCP)(附上代码详细讲解)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍JDBC常见的几种连接池使用&#xff08;C3P0、Druid、HikariCP 、DBCP&#xff09;以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学…

基于Java SSM酒店客房管理系统

酒店需要一个客房信息管理系统对旅客住宿情况进行管理。系统需要维护所有客房的详细信息&#xff0c;登记入住旅客信息&#xff0c;并实现各种相关的查询、统计功能。系统涉及的数据及操作有&#xff1a; 客房&#xff1a;房号、面积、类型(单人间、标准间、高级标间、三人间、…

开启全新消费革命——消费增值,让每一笔消费变成财富!

你是否厌倦了仅仅购买物品或享受服务后便一无所有的消费方式&#xff1f;现在&#xff0c;消费增值的概念将彻底改变你的消费观念&#xff01;通过参与消费增值&#xff0c;你的每一笔消费都将变得更有价值&#xff01; 消费增值是一种全新的消费理念&#xff0c;它让你在购物的…

最新搭建彩虹易支付平台

1、购买服务器并解析域名 Cloudflare域名解析&#xff1a;【点击进入】 2、SSH连接服务器并放行端口 SSH连接工具Finalshell&#xff1a;【点击进入】 放行端口&#xff08;根据实际情况来放行&#xff0c;大部分的云平台都可以在控制台操作&#xff0c;Vultr需要单独放行&…

tex中的边框

文章目录 利用tcolorbox宏包给公式加框 利用tcolorbox宏包 tcolorbox可以创建一个盒子的环境&#xff0c;例如&#xff1a; \documentclass{article} \usepackage{tcolorbox} \begin{document}\begin{tcolorbox}[left1cm, right1cm, top0.5cm, bottom0.5cm,colbackblue!10!wh…

Schedu,Quartz,Timer 三种定时任务

1. Schedu&#xff08;基于ScheduledExecutorService的定时任务&#xff09; 特点&#xff1a; 基于线程池&#xff1a; ScheduledExecutorService 是基于线程池的定时任务调度器。这使得它能够有效地管理和重用线程&#xff0c;减少了线程创建和销毁的开销。 可调度多个任务…

CSRF之pikachu靶场DW

1&#xff0c;登录皮卡丘靶场&#xff0c;get请求&#xff1b; 2&#xff0c;抓包并修改标记后的个人信息 最后放通一下&#xff0c;发现账号信息被修改 2&#xff0c;post请求 1提交post数据并使用bp抓包 2.利用工具改包&#xff0c;并生成url 3&#xff0c;点击提交后&#…

SpringBoot自定义异常处理机制

说明&#xff1a;在完整的项目结构中&#xff0c;我们通常会创建一个自定义的异常处理机制&#xff0c;在系统可能出现异常的地方手动抛出这些异常&#xff0c;可以快速定位到异常代码片段&#xff0c;提供项目的可维护性。 本文介绍在SpringBoot项目中&#xff0c;搭建一套自…

ssm党务政务服务热线平台源码和论文答辩PPT

摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计…

Vue3的watch函数中,第三个参数配置对象详细分析

在Vue 3的watch函数中&#xff0c;第三个参数是一个配置对象&#xff0c;用于定义如何执行watch函数。下面是几个常用的配置项的讲解&#xff0c;并附上代码示例&#xff1a; 1、immediate immediate&#xff1a;当设置为true时&#xff0c;会在初始渲染时立即执行watch函数。…

C++11改进单例模式

单例模式保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 C11之前&#xff0c;实现一个通用的泛型单例模式时&#xff0c;会遇到一个问题&#xff1a;这个泛型单例要能够创建所有的类型对象&#xff0c;但是这些类型的构造函数形参可能尽不相同&#xff0c;…

Appium:进行iOS自动化测试遇到的问题与解决方案

问题与解决方案 在使用Appium进行iOS自动化测试时&#xff0c;可能会遇到各种问题。 以下是一些常见的问题及其解决方案&#xff1a; 无法启动inspector问题 最新版本的Appium已经将内置的inspector独立了出去&#xff0c;需要单独安装inspector进行调试。确保inspector对应…

任意密码重置+CRRF

一、XSS漏洞 在商城的搜索处&#xff0c;输入标准语句的传参直接就可以弹窗 二、逻辑漏洞-用户枚举 在用户注册界面&#xff0c;点击发送验证码&#xff0c;然后用BURP发包 更改手机号传参&#xff0c;这里手机号传参没有进行加密&#xff0c;直接用手机号的位置进行爆破 正确的…

LeetCode力扣每日一题(Java):9、回文数

一、题目 二、解题思路 1、我的思路 当x<0时&#xff0c;x一定不是回文数&#xff0c;直接返回false 当x>0且x<10时&#xff0c;x一定是回文数&#xff0c;直接返回true x>10时&#xff0c;先将x转为字符串。将数字转成字符串方法挺多的&#xff0c;以下是&…

06、基于内容的过滤算法Tensorflow实现

06、基于内容的过滤算法Tensorflow实现 开始学习机器学习啦&#xff0c;已经把吴恩达的课全部刷完了&#xff0c;现在开始熟悉一下复现代码。全部工程可从最上方链接下载。 05、基于梯度下降的协同过滤算法中已经介绍了协同过滤算法的基本实现方法&#xff0c;但是这种方法仅…

SpringBoot集成i18n(多语言)

配置文件 spring: messages: basename: il8n/messages # 配置国际化资源文件路径 fallback-to-system-locale: true # 是否使用系统默认的语言环境作为备选项 国际化配置 import org.springframework.context.annotation.Bean; import org.spr…

Spring中通知是什么

面向切面编程 这个切面是哪个面 面向切面编程&#xff08;Aspect-Oriented Programming&#xff0c;AOP&#xff09;是一种编程范式&#xff0c;它通过切面&#xff08;Aspect&#xff09;来分离横切关注点&#xff08;Cross-cutting Concerns&#xff09;和核心业务逻辑。 在…

MySQL-宋红康-(课P14-P15)-基本查询语句(Select)

b站视频&#xff1a; 14-最基本的SELECT...FROM结构_哔哩哔哩_bilibili 8.4 基本查询(Select)语句 数据table: emp员工表创建如下 # 员工表 CREATE TABLE EMP (EMPNO INT PRIMARY KEY, -- 员工编号ENAME VARCHAR(10), -- 员工名称JOB VARCHAR(9), -- 工…

10、SQL注入——数据库基础

文章目录 一、数据库概述二、数据库分类Mysql数据库连接方法 三、识别数据库四、SQL语法4.1 SQL基本语法4.2 高级操作 一、数据库概述 数据库&#xff08;database&#xff09;&#xff1a;存储在磁盘、磁带、光盘或其他外存介质上、按一定结构组织在一起的相关数据的集合。数…

webpack对项目进行优化

对项目进行优化是提高性能和效率的关键&#xff0c;以下是一些实用的Webpack优化技巧&#xff1a; 代码拆分&#xff08;Code Splitting&#xff09;&#xff1a;将代码拆分为多个小块&#xff0c;按需加载。通过配置splitChunks插件&#xff0c;可以将公共代码提取到单独的文件…