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

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

條件(動態(tài))結(jié)構(gòu)標(biāo)簽

條件(動態(tài))結(jié)構(gòu)標(biāo)簽

Go
牧羊人nacy 2023-06-19 16:59:06
我正在嘗試在 Go 中解析一些 xml 文檔。為此,我需要定義一些結(jié)構(gòu),而我的結(jié)構(gòu)標(biāo)簽取決于特定條件。想象一下下面的代碼(即使我知道它不會工作)if someCondition {    type MyType struct {        // some common fields        Date    []string `xml:"value"`    }} else {    type MyType struct {        // some common fields        Date    []string `xml:"anotherValue"`    }}var t MyType// do the unmarshalling ...問題是這兩個(gè)結(jié)構(gòu)有很多共同的字段。唯一的區(qū)別在于其中一個(gè)字段,我想防止重復(fù)。我怎么解決這個(gè)問題?
查看完整描述

3 回答

?
慕碼人8056858

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

您使用不同的類型來解組?;旧?,您編寫了兩次解組代碼,然后運(yùn)行第一個(gè)版本或第二個(gè)版本。對此沒有動態(tài)解決方案。



查看完整回答
反對 回復(fù) 2023-06-19
?
神不在的星期二

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

最簡單的可能是處理所有可能的字段并進(jìn)行一些后處理。


例如:


type MyType struct {

    DateField1    []string `xml:"value"`

    DateField2    []string `xml:"anotherValue"`

}


// After parsing, you have two options:


// Option 1: re-assign one field onto another:

if !someCondition {

    parsed.DateField1 = parsed.DateField2

    parsed.DateField2 = nil

}


// Option 2: use the above as an intermediate struct, the final being:

type MyFinalType struct {

    Date    []string `xml:"value"`

}


if someCondition {

    final.Date = parsed.DateField1

} else {

    final.Date = parsed.DateField2

}

注意:如果消息差異很大,您可能需要完全不同的類型進(jìn)行解析。后處理可以從其中任何一個(gè)生成最終結(jié)構(gòu)。


查看完整回答
反對 回復(fù) 2023-06-19
?
慕尼黑8549860

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

如前所述,您必須復(fù)制該字段。問題是重復(fù)應(yīng)該存在于何處。


如果它只是多個(gè)字段中的一個(gè),一種選擇是使用嵌入和字段陰影:


type MyType struct {

    Date    []string `xml:"value"`

    // many other fields

}

然后當(dāng)Date使用其他字段名稱時(shí):


type MyOtherType struct {

    MyType // Embed the original type for all other fields

    Date     []string `xml:"anotherValue"`

}

然后在解組之后MyOtherType,很容易將Date值移動到原始結(jié)構(gòu)中:


type data MyOtherType

err := json.Unmarshal(..., &data)

data.MyType.Date = data.Date

return data.MyType // will of MyType, and fully populated

請注意,這僅適用于解組。如果您還需要編組這些數(shù)據(jù),可以使用類似的技巧,但圍繞它的機(jī)制必須從本質(zhì)上顛倒過來。


查看完整回答
反對 回復(fù) 2023-06-19
  • 3 回答
  • 0 關(guān)注
  • 174 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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