我在制作結構的動態模型時遇到問題。我的意思是我想斷言或強制轉換,或者只是根據傳入的數據支柱更改結構的類型。如果sourceName變量是type_x,比類型deserializedData應該是type_x,如果type_y,比type_y。如何為此deserializedData動態設置變量?我的代碼中有這部分: .... var cacheData []byte var deserializedData models.NoaggModel cache_err := cache.Get(string(string(sourceName) + "_" + string(t.Date)), &cacheData); if cache_err != nil { fmt.Println("cache_error: ", cache_err) panic("the cache is empty") } err2 := json.Unmarshal([]byte(cacheData), &deserializedData) if err2 == nil { fmt.Println("deserialized data: " + string(sourceName), deserializedData) } for _, chart := range charts { w.Name = chart.Name if err2 == nil { w.Data = countDataByName(sourceName, deserializedData, t.Request.Filters, string(chart.Name)) } out <- w }....如何修改它,避免models.Noagg Model以嚴格的方式設置類型?
1 回答

桃花長相依
TA貢獻1860條經驗 獲得超8個贊
可以使用反射包在運行時動態創建類型的實例。您可以使用地圖來存儲您應該能夠創建的不同類型:
例子:
package main
import (
"fmt"
"reflect"
)
type Foo struct {
Foo string
}
type Bar struct {
Bar int
}
func main() {
var sourceTypes = map[string]reflect.Type{
"foo": reflect.TypeOf(Foo{}),
"bar": reflect.TypeOf(Bar{}),
}
sourceName := "foo"
var deserializedData interface{}
deserializedData = reflect.New(sourceTypes[sourceName]).Interface()
fmt.Printf("%#v", deserializedData)
}
輸出:
&main.Foo{Foo:""}
游樂場: http : //play.golang.org/p/qeDA4cu5et
- 1 回答
- 0 關注
- 146 瀏覽
添加回答
舉報
0/150
提交
取消