使用第三方模塊mapstructure
package scripts_stroage import ( "encoding/json" "fmt" "github.com/mitchellh/mapstructure" "testing" ) type User struct { Name string `json:"name"` PhoneNumber string `json:"phone_number"` Hobbies []string `json:"hobbies"` } // 對於帶 下划線命名 的變量,不能直接解析到 func TestRangeMap1(t *testing.T) { m1 := map[string]interface{}{ "name": "whw", "phone_number": "13333333333", // TODO 將字段設置為 phonenumber 就可以解析了!!! "hobbies": []string{"football", "basketball"}, } u1 := User{} // mapstructure.Decode方法...沒有辦法解析帶下划線的字段~ err := mapstructure.Decode(m1, &u1) if err != nil { panic(err) } fmt.Println("name>>> ", u1.Name) // whw fmt.Println("phone_number>>> ", u1.PhoneNumber) // (空,沒有解析到) fmt.Println("hobbies>>> ", u1.Hobbies) // [football basketball] } // 對於帶 下划線命名 的變量,需要json序列化與反序列化操作 func TestMap2Struct2(t *testing.T) { m2 := map[string]interface{}{ "name": "whw2", "phone_number": "13333333333", "hobbies": []string{"football", "basketball"}, } u2 := User{} // 序列化 arr, err := json.Marshal(m2) if err != nil { panic(err) } // 反序列化 err2 := json.Unmarshal(arr, &u2) if err2 != nil { panic(err2) } fmt.Println("name>>> ", u2.Name) // whw2 fmt.Println("phone_number>>> ", u2.PhoneNumber) // 13333333333 fmt.Println("hobbies>>> ", u2.Hobbies) // [football basketball] }
~~~