第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

基于字符串動(dòng)態(tài)創(chuàng)建對(duì)象

基于字符串動(dòng)態(tài)創(chuàng)建對(duì)象

Go
MM們 2023-04-24 16:49:36
我正在嘗試基于字符串動(dòng)態(tài)創(chuàng)建結(jié)構(gòu)。在下面的示例中,reflect.TypeOf &c 和 &c1 是不同的,因?yàn)槲覐?makeInstance 返回了 interface{}。TypeOf c 和 c1 是一樣的。我的問(wèn)題是如何更改處理 makeInstance 輸出的方式,以便它創(chuàng)建一個(gè)與 c1 相同的對(duì)象,但仍然允許我創(chuàng)建與 b1 相同的對(duì)象?type Car struct {    Make  int `json:"make"`    Model int `json:"model"`}type Bus struct {    Seats int `json:"seats"`    Route int `json:"route"`}var typeRegistry = make(map[string]reflect.Type)func init() {    typeRegistry["Car"] = reflect.TypeOf(Car{})    typeRegistry["Bus"] = reflect.TypeOf(Bus{})}func makeInstance(name string) interface{} {    v := reflect.New(typeRegistry[name]).Elem()    return v.Interface()}func main() {    c := makeInstance("Car")    b := makeInstance("Bus")    var b1 Bus    var c1 Car    fmt.Println(reflect.TypeOf(&c))    fmt.Println(reflect.TypeOf(&c1))    fmt.Println(reflect.TypeOf(c))      fmt.Println(reflect.TypeOf(c1))編輯:我的總體結(jié)果是有一個(gè)程序讀取一個(gè) json 配置文件,該文件將列出我想要關(guān)閉的對(duì)象類型并點(diǎn)擊 rest api 并收集例如{    "auth":[{                "username": "admin",                "password": "admin"            }],    "transport":[            {                "vehicle":["car", "bus"]            }]}當(dāng)循環(huán)通過(guò)車輛時(shí),它會(huì)點(diǎn)擊一個(gè) api 并執(zhí)行查詢并返回?cái)?shù)據(jù)。然后我想創(chuàng)建一個(gè)數(shù)組,其中包含配置中包含的任何車輛,并將 json 響應(yīng)解組到其中。我正在嘗試動(dòng)態(tài)創(chuàng)建對(duì)象,這樣我就可以避免檢查車輛是否=汽車、車輛是否=公共汽車等,因?yàn)槲易罱K會(huì)擁有多種類型的車輛,但可能并不總是擁有所有車輛,而且看起來(lái)很啰嗦。
查看完整描述

2 回答

?
慕的地10843

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊

該函數(shù)返回類型CarBus寫(xiě)入的值。如果您希望輸入的變量main具有特定類型,請(qǐng)使用類型斷言:

c := makeInstance("Car").(Car)

如果您的目標(biāo)是獲取指向這些類型值的指針,則返回指針makeInstance

func makeInstance(name string) interface{} {
   return reflect.New(typeRegistry[name]).Interface()
}


查看完整回答
反對(duì) 回復(fù) 2023-04-24
?
拉風(fēng)的咖菲貓

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊

您可能應(yīng)該停下來(lái)閱讀有關(guān)接口值類型斷言的內(nèi)容。Go 不是一種動(dòng)態(tài)類型的語(yǔ)言,您嘗試做的事情很可能會(huì)失敗:

只要您在與您一起工作,interface{}您就無(wú)法在不進(jìn)行反射的情況下訪問(wèn)這些字段(制造商、型號(hào)、座位、路線...)。如果你想寫(xiě)x.Make必須有一個(gè)x類型Car*Car(而不是接口{})。

要從cof 類型interface{}變?yōu)槔?a,Car必須鍵入 assert:

var car Car = c.(Car)

請(qǐng)注意,您不能進(jìn)行動(dòng)態(tài)類型斷言(沒(méi)有反射),c.(Car)如果 c 包含例如 a ,那將會(huì)失敗Bus。因此,在 json.Unmarshaling 到通用接口{}之后,您將必須打開(kāi)已知類型并斷言該類型。這意味著您無(wú)論如何都要為每種類型編寫(xiě)專用代碼。


查看完整回答
反對(duì) 回復(fù) 2023-04-24
  • 2 回答
  • 0 關(guān)注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)