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

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

如何在json的接口中存儲不同的結(jié)構(gòu)

如何在json的接口中存儲不同的結(jié)構(gòu)

Go
溫溫醬 2021-12-07 10:53:23
http://play.golang.org/p/JJnU5ag234我只能讓 vA 直接工作,如果我想根據(jù)我期望的 json 使用我的 vI 在其中存儲 A 或 B,我得到json:無法將對象解組為 main.TA 類型的 Go 值package mainimport (    "encoding/json"    "fmt"    "strings")type T interface {    Printer()}type A struct{ JA string }func (t A) Printer() { fmt.Print("A") }type B struct{ JB string }func (t B) Printer() { fmt.Print("B") }var vA []Avar vB []Bvar vI []Tfunc main() {    // vA = []A{A{}}    // vI = []T{B{}}    vI = []T{A{}}    get()}func get() {    dec := json.NewDecoder(strings.NewReader("[{\"JA\":\"OK\"}]"))    if err := dec.Decode(&vI); err != nil {        fmt.Print(err)    }    for _, v := range vI {        v.Printer()    }}
查看完整描述

1 回答

?
波斯汪

TA貢獻1811條經(jīng)驗 獲得超4個贊

由于您希望解碼器填充結(jié)構(gòu)的字段,因此您必須使用指針。像這樣在類型的指針上定義接口的方法:http : //play.golang.org/p/WUMt9Ok9Xp


package main


import (

    "encoding/json"

    "fmt"

    "strings"

)


type T interface {

    Printer()

}


type A struct {

    JA string

}


func (a *A) Printer() {

    fmt.Printf("A: %v\n", a.JA)

}


type B struct {

    JB string

}


func (b *B) Printer() {

    fmt.Printf("B: %v\n", b.JB)

}


func main() {

    vI := []T{&A{}, &B{}}

    dec := json.NewDecoder(strings.NewReader("[{\"JA\":\"OKA\"}, {\"JB\":\"OKB\"}]"))

    if err := dec.Decode(&vI); err != nil {

        fmt.Print(err)

    }

    for _, v := range vI {

        v.Printer()

    }

}


查看完整回答
反對 回復 2021-12-07
  • 1 回答
  • 0 關(guān)注
  • 181 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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