我在 Go to a 中解組 JSON,map[string]interface{}并使用接口的混合字符串、浮點和切片值來填充PlaceNode結構的字段值。我需要諸如“默認值”之類的東西,因為并非所有 JSON 對象都具有所有 Struct 字段。來自其他語言背景,Structs 是否可索引我習慣于做這樣的事情來設置n Placenode變量的值(例如,好像它是JavaScript中的 a selforthis關鍵字)。n[key] = value;相反,如果可以設置字段,我的PlaceNode結構中有一個方法可以讀取interface{}、使用reflect和可選地分配一個值。我interfaces{}沒有實現所有值,因此我無法直接將其解壓縮到我的結構中。顯然沒有一個字段通過此s.CanSet()檢查。所以我一定是在處理這個錯誤。如何在 Go 中設置動態結構字段?func (n PlaceNode) New(data map[string]interface{}) PlaceNode { for key, val := range data { n.Id = key for k, v := range val.(map[string]interface{}) { f := reflect.ValueOf(v) st := reflect.ValueOf(n) if (st.Kind() == reflect.Struct) { s := st.FieldByName(k) if f.Kind() == reflect.String && true == s.CanSet() { s.SetString(f.String()); } else if f.Kind() == reflect.Float64 && true == s.CanSet() { s.SetFloat(f.Float()); } else if f.Kind() == reflect.Slice && true == s.CanSet() { s.Set(f.Slice(0, f.Len())); } } } } return n}該data參數map[string]interface{}有一個也是 a 的接口,map[string]interface{}如下所示: { "XV.12A": { "Area": 1189.132667, "CensusBlock": 2032, "CensusBlockGroup": 2, "CensusCbsaFips": 40900, "CensusCountyFips": 61, "CensusMcdFips": 90160, "CensusMsaFips": 6922, "CensusPlaceFips": 3204, "CensusStateFips": 6, "CensusTract": 203, "CensusYear": 2010, "Radius": 19.455402434548, "RegionSize": 1189.132667 } }
如何在 Go 中設置動態結構字段?
慕田峪7331174
2021-08-16 15:13:50