flash網(wǎng)站設(shè)計(jì)商丘 峰少 seo博客
前言
google.protobuf.Struct
是 Google Protocol Buffers
中的一種特殊類型,用于表示動(dòng)態(tài)的鍵值對(duì)數(shù)據(jù)。它可以存儲(chǔ)任意類型的數(shù)據(jù),并提供了方便的方法來訪問和操作這些數(shù)據(jù)。
Struct
類型通常用于在不事先知道數(shù)據(jù)結(jié)構(gòu)的情況下傳遞和處理配置、參數(shù)或其他動(dòng)態(tài)數(shù)據(jù)。
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
實(shí)現(xiàn)方法中,接收 UpdateBookRequest
,這時(shí)它的 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 數(shù)據(jù),轉(zhuǎn)化為 jsondata, err := json.Marshal(req.Data)if err != nil {panic(err)}……// 將 json 數(shù)據(jù),轉(zhuǎn)化為結(jié)構(gòu)體scene := &structpb.Struct{} // 這里有一個(gè)非 null 判斷,其中 app.Data 為數(shù)據(jù)庫中查詢if !bytes.Equal(app.Data, []byte("null")) { err = json.Unmarshal(app.Data, scene) if err != nil { panic(err)} }……
}