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

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

如何創建一個通用函數來解組所有類型?

如何創建一個通用函數來解組所有類型?

Go
一只名叫tom的貓 2021-11-29 19:13:05
我在下面有一個函數,我想讓它通用:func genericUnmarshalForType1(file string) Type1 {  raw, err := ioutil.ReadFile(file)  if err != nil {      fmt.Println(err.Error())      os.Exit(1)  }  var type1 Type1  json.Unmarshal(raw, &type1)}我想創建一個接受 Type1 或 Type2 的函數,而無需為每種類型創建一個函數。我怎樣才能做到這一點?
查看完整描述

2 回答

?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

以同樣的方式json.Unmarshal做:


func genericUnmarshal(file string, v interface{}) {

    // File emulation.

    raw := []byte(`{"a":42,"b":"foo"}`)

    json.Unmarshal(raw, v)

}

游樂場:http : //play.golang.org/p/iO-cbK50BE。


您可以通過實際返回遇到的任何錯誤來改進此功能。


查看完整回答
反對 回復 2021-11-29
?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

Go 不支持泛型,但你可以這樣寫:


func genericUnmarshalForType1(file string) interface{} {


    raw, err := ioutil.ReadFile(file)


    if err != nil {

        fmt.Println(err.Error())

        os.Exit(1)

    }


    var x interface{}

    if err = json.NewDecoder(raw).Decode(x); err != nil {

        return nil

    }


    return x

}


func main() {

    x := genericUnmarshalForType1("filename.json");


    var t1 Type1

    var t2 Type2


    switch t := x.(type) {

    case Type1:

        t1 = t

    case Type2:

        t2 = t

    }

}

此外,我建議您閱讀有關使用和數據類型的http://attilaolah.eu/2013/11/29/json-decoding-in-go/Unmarshal。


查看完整回答
反對 回復 2021-11-29
  • 2 回答
  • 0 關注
  • 189 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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