在Go中,http表單數據(例如來自POST或PUT請求的數據)可以作為表單的映射進行訪問map[string][]string。我很難以通用的方式將其轉換為結構。例如,我要加載類似的地圖:m := map[string][]string { "Age": []string{"20"}, "Name": []string{"John Smith"},}變成像這樣的模型:type Person struct { Age int Name string}因此,我試圖編寫一個帶有簽名的函數,該函數LoadModel(obj interface{}, m map[string][]string) []error會將表單數據加載到interface {}中,我可以將其類型轉換回Person。使用反射,這樣我就可以在具有任何字段的任何結構類型上使用它,而不僅是Person,而且可以根據需要將字符串從http數據轉換為int,boolean等。在golang中使用此問題的答案,在使用反射時,如何設置struct字段的值?我可以使用反射設置一個人的價值,例如:p := Person{25, "John"}reflect.ValueOf(&p).Elem().Field(1).SetString("Dave")但是然后我必須為我擁有的每種類型的結構復制load函數。當我嘗試將其用于接口{}時,它將無法正常工作。pi := (interface{})(p)reflect.ValueOf(&pi).Elem().Field(1).SetString("Dave")// panic: reflect: call of reflect.Value.Field on interface Value一般情況下我該怎么做?甚至更好的是,有沒有一種更慣用的Go方式可以完成我想做的事情?
- 3 回答
- 0 關注
- 250 瀏覽
添加回答
舉報
0/150
提交
取消
