回答

收藏

在 Golang 中将结构转换为映射的函数

技术问答 技术问答 256 人阅读 | 0 人回复 | 2023-09-12

到目前为止,我有这个功能,我用的是reflect但是我不太懂怎么用这个包,请多包含。
; x2 J  x3 E3 z' l8 w$ j5 [func ConvertToMap(model interface{}) bson.M {    ret := bson.M{}    modelReflect := reflect.ValueOf(model)    if modelReflect.Kind() == reflect.Ptr {        modelReflect = modelReflect.Elem()      modelRefType := modelReflect.Type()    fieldsCount := modelReflect.NumField()    var fieldData interface{}    for i := 0; i 我还查看了 JSON 包源代码,因为它应该包含我需要的实现(或它的一部分),但我不太了解。
2 h" E5 R! n4 u- i# \8 A                                                                + _! }5 S! F' c" B0 M) s( Q! A
    解决方案:                                                               
/ F- s% p9 i4 ^4 e; ]                                                                我也需要这样的东西。我使用一个将结构转换为地图的内部包。我决定把它和其他东西一起做struct一起使用基于高级功能的开源。看一看:
9 E+ J. _6 H, a0 M+ z/ `- O1 M& Qhttps://github.com/fatih/structs# T% L& h! C5 E2 A
它支持:& g% O% T; h, k3 ~3 l' q1 @1 q5 J
将结构转换为地图" u1 y/ A6 H9 N% g; f. O; A" {
将结构的字段提取到 []string
4 ^) R5 a4 M' b' k9 r将结构值提取到 []values
( O/ O: [" _$ X0 }  a检查结构是否初始化. A# E" K7 E  l9 z5 B* X- y
检查传输的接口是指结构体还是指向结构体
这里可以看到一些示例:http : //godoc.org/github.com/fatih/structs#pkg-examples 例如,将结构转换为地图很简单:
) W" }4 I+ r" l( S9 Z- `
    type Server struct    Name    string    ID      int32    Enabled bool}s := &Server{    Name:    "gopher",   ID:      123456,   Enabled: true,}// => {"Name":"gopher","ID":123456,"Enabled":true}m := structs.Map(s)  u1 l6 d9 d/ {- x
该structs该包支持匿名(嵌入)字段和嵌套结构。该包提供通过字段标签过滤某些字段。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则