亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

go:接口類型斷言

go:接口類型斷言

Go
眼眸繁星 2021-12-13 18:30:45
我在制作結構的動態模型時遇到問題。我的意思是我想斷言或強制轉換,或者只是根據傳入的數據支柱更改結構的類型。如果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


查看完整回答
反對 回復 2021-12-13
  • 1 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號