golang struct to map
阿新 • • 發佈:2019-09-26
最近寫業務,有些很噁心的需求,涉及php,go 的型別轉換,因為php是弱型別,所以會涉及入參不定的情況。這裡介紹下struct to map 的實現,具體例子參考:
package main import ( "fmt" "reflect" ) type JsonStruct struct { AA string `json:"a_a"` BB string `json:"b_b"` } func Struct2MapName(obj interface{}) map[string]interface{} { t := reflect.TypeOf(obj) v := reflect.ValueOf(obj) var data = make(map[string]interface{}) for i := 0; i < t.NumField(); i++ { data[string(t.Field(i).Name)] = v.Field(i).Interface() } return data } func Struct2MapJson(obj interface{}) map[string]interface{} { t := reflect.TypeOf(obj) v := reflect.ValueOf(obj) var data = make(map[string]interface{}) for i := 0; i < t.NumField(); i++ { data[string(t.Field(i).Tag.Get("json"))] = v.Field(i).Interface() } return data } func main() { obj := JsonStruct{ AA: "1", BB: "2", } data := Struct2MapName(obj) fmt.Printf("data is %v\n", data) data1 := Struct2MapName(obj) fmt.Printf("data is %v\n", data1) }
reflect 的type 有name 可以用name 做map key, 也可以使用GetTag 取 json 或者自定義tag 去作為key, 靈活度更大一點,注意這裡