go kratos protobuf 接收动态JSON数据

前言

google.protobuf.StructGoogle Protocol Buffers 中的一种特殊类型,用于表示动态的键值对数据。它可以存储任意类型的数据,并提供了方便的方法来访问和操作这些数据。

Struct 类型通常用于在不事先知道数据结构的情况下传递和处理配置、参数或其他动态数据。

https://pkg.go.dev/google.golang.org/protobuf/types/known/structpb

代码示例

以下代码,引入了 google/protobuf/struct.proto,该文件定义了 google.protobuf.Struct 类型。

在 UpdateBookRequest 消息中,字段 data 使用 google.protobuf.Struct 类型定义。

复制代码
syntax = "proto3";

import "google/protobuf/struct.proto";

message UpdateBookRequest {
  google.protobuf.Struct data = 1;
}

Kratos 框架,Service 实现方法中,接收 UpdateBookRequest,这时它的 pb 文件中定义为 Data *structpb.Struct protobuf:"bytes,1,opt,name=data,proto3" json:"data"

复制代码
func (s *myService) UpdateBook(ctx context.Context, req *api.UpdateBookRequest) (*api.UpdateBookReply, error) {
    ……
    // 接收 data bytes 数据,转化为 json
    data, err := json.Marshal(req.Data)
	if err != nil {
		panic(err)
	}

    ……
    // 将 json 数据,转化为结构体
	scene := &structpb.Struct{}  
    // 这里有一个非 null 判断,其中 app.Data 为数据库中查询
	if !bytes.Equal(app.Data, []byte("null")) {  
	   err = json.Unmarshal(app.Data, scene)  
	   if err != nil {  
	    panic(err)
	   }  
	}
    ……
}
posted @   牛奔  阅读(583)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示