如何使用google.protobuf.Struct?

ops/2024/10/19 16:35:03/

google.golang.org/protobuf/types/known/structpb 包提供了一种方式来创建和操作 google.protobuf.Struct 类型的数据。google.protobuf.Struct 是一种灵活的数据类型,可以表示任何结构化数据。

以下是如何使用 structpb 包的一些示例:

  1. 创建 Struct
import ("google.golang.org/protobuf/types/known/structpb"
)func createStruct() (*structpb.Struct, error) {// 创建一个 map 来存储我们的数据data := map[string]interface{}{"name": "John Doe","age":  30,"emails": []interface{}{"johndoe@example.com","johndoe@gmail.com",},"isVerified": true,}// 使用 structpb.NewStruct 函数将 map 转换为 Structreturn structpb.NewStruct(data)
}
  1. Struct 中读取数据:
import ("fmt""google.golang.org/protobuf/types/known/structpb"
)func readStruct(s *structpb.Struct) {// 使用 AsMap 函数将 Struct 转换为 mapdata := s.AsMap()// 从 map 中读取数据name := data["name"].(string)age := data["age"].(int64)emails := data["emails"].([]interface{})isVerified := data["isVerified"].(bool)fmt.Printf("Name: %s\n", name)fmt.Printf("Age: %d\n", age)fmt.Printf("Emails: %v\n", emails)fmt.Printf("Is Verified: %v\n", isVerified)
}

注意:在从 Struct 读取数据时,需要进行类型断言,因为 AsMap 函数返回的是 map[string]interface{} 类型的数据。

使用具体的结构体

你可以定义一个具体的结构体来代替 map[string]interface{}。这样做的好处是类型更明确,代码更易读,而且可以利用 Go 的类型系统进行编译时检查。

以下是如何使用具体的结构体来创建 google.protobuf.Struct

首先,定义你的结构体。例如,我们可以定义一个 User 结构体:

type User struct {Name       string   `json:"name"`Age        int64    `json:"age"`Emails     []string `json:"emails"`IsVerified bool     `json:"isVerified"`
}

然后,你可以使用 json.Marshal 将你的结构体转换为 JSON,再使用 jsonpb.Unmarshal 将 JSON 转换为 google.protobuf.Struct

import ("encoding/json""google.golang.org/protobuf/encoding/protojson""google.golang.org/protobuf/types/known/structpb"
)func createStructFromUser(user User) (*structpb.Struct, error) {// 将 User 结构体转换为 JSONjsonData, err := json.Marshal(user)if err != nil {return nil, err}// 创建一个新的 StructpbStruct := &structpb.Struct{}// 使用 protojson.Unmarshal 将 JSON 转换为 Structif err := protojson.Unmarshal(jsonData, pbStruct); err != nil {return nil, err}return pbStruct, nil
}

这样,你就可以使用具体的结构体来创建 google.protobuf.Struct 了。


http://www.ppmy.cn/ops/39653.html

相关文章

高斯数据库创建函数的语法

CREATE FUNCTION 语法格式 •兼容PostgreSQL风格的创建自定义函数语法。 CREATE [ OR REPLACE ] FUNCTION function_name ( [ { argname [ argmode ] argtype [ { DEFAULT | : | } expression ]} [, …] ] ) [ RETURNS rettype [ DETERMINISTIC ] | RETURNS TABLE ( { column_…

Linux函数

目录 一、脚本函数 1.1 创建函数 1.2 使用函数 二、函数返回值 2.1 默认的退出状态码 2.2 使用return命令 2.3 使用函数输出 三、在函数中使用变量 3.1 向函数传达参数 3.2 在函数中处理变量 四、数组变量和函数 4.1 向函数中传递数组 4.2 从函数中返回数组 五、函数…

【数组算法】598. 区间加法

给你一个 m x n 的矩阵 M 和一个操作数组 op 。矩阵初始化时所有的单元格都为 0 。ops[i] [ai, bi] 意味着当所有的 0 < x < ai 和 0 < y < bi 时&#xff0c; M[x][y] 应该加 1。 在 执行完所有操作后 &#xff0c;计算并返回 矩阵中最大整数的个数 。 示例 1: …

探索全球静态住宅IP:网络新时代的稳定基石

在数字化浪潮席卷全球的今天&#xff0c;互联网已成为人们生活中不可或缺的一部分。随着网络技术的飞速发展&#xff0c;IP地址作为网络连接的标识符&#xff0c;其重要性日益凸显。特别是在对稳定性和安全性要求极高的应用场景中&#xff0c;全球静态住宅IP凭借其独特的优势&a…

shopee虾皮跨境商家:月出1000单爆款打造思路!

Shopee爆款打造的方式是需要满足很多特点的&#xff0c;我把它大概归结为了7大要素&#xff1a; 1、顺应平台潮流 通过Shopee前台、市场周报&#xff0c;以及你对这个行业的经验&#xff0c;能够及时掌握平台最近主推产品的信息&#xff0c;又刚好我们店铺里面的商品有能够搭…

matlab中的引导滤波函数imguidedfilter()

在MATLAB中&#xff0c;可以使用imguidedfilter函数进行引导滤波。该函数的语法如下&#xff1a; output imguidedfilter(input, guidance, varargin)其中&#xff0c;input是待滤波的图像&#xff0c;guidance是用来引导滤波的图像&#xff08;通常是原始图像或其它相关信息…

js实现json数据可编辑

背景 项目中有低代码平台&#xff0c;由于历史脏数据和非同步编辑的问题&#xff0c;偶尔会出现数据错乱的问题&#xff0c;希望有一个快捷的方式修改数据 之前在用Formily的时候有注意到designable/react 里面的json数据编辑功能非常不错如果能应用到项目里就完美了 design…

Element UI 快速入门指南

Element UI 快速入门指南 Element UI 是一个基于 Vue.js 的组件库&#xff0c;提供了丰富的 UI 组件和工具&#xff0c;可以帮助开发人员快速构建现代化的 Web 应用程序。本文将介绍如何快速入门使用 Element UI&#xff0c;并展示一些常用的组件和功能。 安装 Element UI 使…