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

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

Golang 映射結(jié)構(gòu)映射

Golang 映射結(jié)構(gòu)映射

Go
明月笑刀無(wú)情 2023-03-21 14:54:21
這是我的數(shù)據(jù)結(jié)構(gòu),并試圖為此數(shù)據(jù)創(chuàng)建一個(gè)結(jié)構(gòu),但因錯(cuò)誤而失敗。{                "data": {                  "image": {                    "url": "tests.jpg"                  }                }              }錯(cuò)誤:-prog.go:16:20: invalid field name "Data" in struct initializerprog.go:16:22: missing type in composite literal代碼:-package mainimport (    "fmt")type Images struct {    Data struct {        Image struct {            url string        }    }}func main() {    i := Images{"Data": {"Image": {"url": "test.jpg"}}}    fmt.Println(i)}閱讀以下答案后,我嘗試了這個(gè) -package mainimport (    "fmt")//{ "data": {//                  "image": {//                    "url": "tests.jpg"//                  }//                }//              }type Images struct {    Data Data}type Data struct {    Image Image}type Image struct {    url string}func main() {    i := Images{        Data: Data{            Image: Image{url: "test.jpg"}}}    fmt.Println(i)}最終輸出:-{{{test.jpg}}}
查看完整描述

1 回答

?
翻過(guò)高山走不出你

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

這里有許多容易混淆的問(wèn)題。


輸出:

首先也是最重要的是您沒(méi)有指定任何特定的輸出格式。使用 fmt.Println 輸出數(shù)據(jù)結(jié)構(gòu)實(shí)際上只是為了方便調(diào)試,格式非常隨意,如果使用fmt.Printf("%#v\n", i). 默認(rèn)的 Println 輸出 Printf 的“%v”的等價(jià)物。


要獲得特定格式的輸出(Go 本身除外),您需要導(dǎo)入一個(gè)可以生成該格式的包。幸運(yùn)的是,標(biāo)準(zhǔn)庫(kù)中包含了一些流行的格式。但在我們開(kāi)始之前,還有一些其他的事情需要解決/理解。


出口:

結(jié)構(gòu)的大寫成員是導(dǎo)出的小寫成員不是。這意味著圖像結(jié)構(gòu)中的“url”必須大寫,否則諸如此類的包encoding/json將無(wú)法訪問(wèn)該成員以將其導(dǎo)出。


匿名類型:

其他人強(qiáng)調(diào)為整體結(jié)構(gòu)中的每個(gè)結(jié)構(gòu)化數(shù)據(jù)類型創(chuàng)建顯式定義,我認(rèn)為這通常是個(gè)好建議。然而,有那么多一次性的類型定義四處飄蕩也常常是愚蠢的,所以在語(yǔ)言中使用內(nèi)聯(lián)匿名結(jié)構(gòu)定義是完全可以接受的。另外一個(gè)很好的接觸是結(jié)構(gòu)相同的匿名類型被接受為與定義類型不同的相同類型。


這是一個(gè)使用匿名結(jié)構(gòu)執(zhí)行上述操作的示例,這無(wú)疑是病態(tài)的。


i := struct{

    Data interface{} `json:"data"`

}{

    Data:struct{

        Image interface{} `json:"image"`

    } {

        Image:struct{

            Url string `json:"url"`

        }{

            Url:"test.jpg",

        },

    },

}

雖然這有效,但它非常混亂。但請(qǐng)注意,您甚至可以將標(biāo)簽添加到匿名類型的字段中,以便 json 格式按預(yù)期進(jìn)行轉(zhuǎn)換。


另一種匿名完成并避免所有這些type定義瘋狂的方法就是使用地圖。這是那個(gè)例子。但是請(qǐng)注意,如果一些 Go cargo 教徒看到你map[string]interface{}到處使用,他們會(huì)對(duì)你大喊大叫。然而,無(wú)論是在實(shí)踐中還是在哲學(xué)上,它實(shí)際上都沒(méi)有錯(cuò)。


j := map[string]interface{} {

    "data":map[string]interface{}{

        "image":map[string]interface{}{

            "url":"test.jpg",

        },

    },

}

但是,通常,您希望利用類型化語(yǔ)言可以為您提供的功能。像 Go 這樣的強(qiáng)類型語(yǔ)言非常擅長(zhǎng)在早期發(fā)現(xiàn)其他微妙的錯(cuò)誤。


這不是更好看嗎:


type Object map[string]interface{}


// ...


j := Object{

    "data": Object{

        "image": Object{

            "url":"test.jpg",

        },

    },

}

再次使用編碼

這是您的程序,采用更慣用的風(fēng)格。在我看來(lái),這并非巧合,也更具可讀性。


    package main


    import (

        "fmt"

        "encoding/json"

    )


    type data struct {

        Image image `json:"image"`

    }


    type image struct {

        Url string `json:"url"`

    }


    type images struct {

        Data data `json:"data"`

    }



    func main() {

        i := images{Data: data{Image: image{Url: "test.jpg"}}}


        data, _ := json.Marshal(i)

        fmt.Println(string(data))


    }

另請(qǐng)注意,雖然您必須導(dǎo)出成員以使它們出現(xiàn)在 json 中,但您不必自己導(dǎo)出類型。


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

添加回答

舉報(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)