我想将一个结构转换为Golang中的地图。如果我可以在创建的地图中使用JSON标签作为键(否则默认为字段名称),那也将很好。
编码愉快!:)
到目前为止,我具有此功能,我正在使用反射包,但我不太了解如何使用该包,请多多包涵。
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 < fieldsCount; i++ { field := modelReflect.Field(i) switch field.Kind() { case reflect.Struct: fallthrough case reflect.Ptr: fieldData = ConvertToMap(field.Interface()) default: fieldData = field.Interface() } ret[modelRefType.Field(i).Name] = fieldData } return ret }
我也查看了JSON包的源代码,因为它应该包含我所需的实现(或部分实现),但理解得并不多。
我也需要这样的东西。我正在使用将结构转换为地图的内部软件包。我决定使用其他struct基于高级的功能将其开源。看一看:
struct
https://github.com/fatih/structs
它支持:
[]string
[]values
您可以在此处看到一些示例:http : //godoc.org/github.com/fatih/structs#pkg- examples 例如,将结构转换为地图很简单:
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)
该structs程序包支持匿名(嵌入式)字段和嵌套结构。该软件包提供了通过字段标签过滤某些字段的功能。
structs