Golang怎么進(jìn)行struct轉(zhuǎn)換

這篇文章主要介紹了Golang怎么進(jìn)行struct轉(zhuǎn)換的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Golang怎么進(jìn)行struct轉(zhuǎn)換文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。

目前創(chuàng)新互聯(lián)已為上千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、綿陽(yáng)服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、廬陽(yáng)網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

定義結(jié)構(gòu)體

首先,我們先來(lái)定義一個(gè)結(jié)構(gòu)體:

type Person struct {
    Name    string
    Age     int
    Address Address
}

type Address struct {
    Province string
    City     string
    Street   string
}

在以上的代碼中,我們定義了兩個(gè)結(jié)構(gòu)體,一個(gè)是Person,它包含了Name、Age和Address三個(gè)屬性,其中Address是一個(gè)嵌套的結(jié)構(gòu)體。

將結(jié)構(gòu)體轉(zhuǎn)成 JSON

在實(shí)際的開發(fā)中,我們經(jīng)常需要將結(jié)構(gòu)體轉(zhuǎn)成JSON格式。Golang中內(nèi)置的encoding/json包提供了方便的JSON編碼和解碼功能,我們可以使用該包將結(jié)構(gòu)體轉(zhuǎn)成JSON格式的數(shù)據(jù)。

import "encoding/json"

func main() {
    person := Person{Name: "Tom", Age: 18, Address: Address{Province: "Beijing", City: "Beijing", Street: "Wudaokou"}}
    jsonBytes, err := json.Marshal(person)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(string(jsonBytes))
}

以上代碼中,我們先創(chuàng)建了一個(gè)Person實(shí)例,然后調(diào)用json.Marshal()將該實(shí)例轉(zhuǎn)成了JSON格式的數(shù)據(jù)。在轉(zhuǎn)換過(guò)程中,如果存在錯(cuò)誤,將會(huì)輸出錯(cuò)誤信息,否則輸出轉(zhuǎn)換后結(jié)果的字符串。

將JSON轉(zhuǎn)成結(jié)構(gòu)體

除了將結(jié)構(gòu)體轉(zhuǎn)成JSON格式,我們還經(jīng)常需要將JSON格式的數(shù)據(jù)轉(zhuǎn)成結(jié)構(gòu)體。在上面的例子中,我們已經(jīng)將person轉(zhuǎn)成了JSON格式,現(xiàn)在我們來(lái)將JSON數(shù)據(jù)轉(zhuǎn)成結(jié)構(gòu)體。

jsonStr := `{"Name":"Tom","Age":18,"Address":{"Province":"Beijing","City":"Beijing","Street":"Wudaokou"}}`
person := Person{}
err := json.Unmarshal([]byte(jsonStr), &person)
if err != nil {
    fmt.Println(err)
}
fmt.Println(person)

在以上代碼中,我們先將JSON格式的數(shù)據(jù)定義為jsonStr,然后調(diào)用json.Unmarshal()將其轉(zhuǎn)成Person結(jié)構(gòu)體。同樣的,在轉(zhuǎn)換過(guò)程中如果出現(xiàn)錯(cuò)誤,輸出錯(cuò)誤信息,否則輸出轉(zhuǎn)換后的Person結(jié)構(gòu)體實(shí)例。

字段轉(zhuǎn)換

有些情況下,數(shù)據(jù)的字段名和結(jié)構(gòu)體中字段名不一致,這時(shí)候需要進(jìn)行字段轉(zhuǎn)換。Golang中,可以通過(guò)將結(jié)構(gòu)體的屬性名修改為Tag的方式實(shí)現(xiàn)。

type Person struct {
    Name    string `json:"name"`
    Age     int    `json:"age"`
    Address Address
}

type Address struct {
    Province string `json:"province"`
    City     string `json:"city"`
    Street   string `json:"street"`
}

以上代碼中,我們?cè)诮Y(jié)構(gòu)體屬性名前添加了json tag,它指定了JSON的屬性名。在轉(zhuǎn)換過(guò)程中,如果tag存在,將以tag為準(zhǔn)。

結(jié)構(gòu)體中存在數(shù)組

在結(jié)構(gòu)體中,可能會(huì)存在包含數(shù)組的屬性。對(duì)于這種情況,我們需要對(duì)數(shù)組進(jìn)行遍歷操作。

type Person struct {
    Name    string    `json:"name"`
    Age     int       `json:"age"`
    Address []Address `json:"address"`
}

type Address struct {
    Province string `json:"province"`
    City     string `json:"city"`
    Street   string `json:"street"`
}

func main() {
    jsonStr := `{"name":"Tom","age":18,"address":[{"province":"Beijing","city":"Beijing","street":"Wudaokou"},{"province":"Henan","city":"Kaifeng","street":"Longting"}]}`
    person := Person{}
    err := json.Unmarshal([]byte(jsonStr), &person)
    if err != nil {
        fmt.Println(err)
    }
    for _, a := range person.Address {
        fmt.Println(a.Province, a.City, a.Street)
    }
}

以上代碼中,Person結(jié)構(gòu)體中包含了一個(gè)Address的數(shù)組,我們需要對(duì)其進(jìn)行遍歷。在轉(zhuǎn)換過(guò)程中,我們可以通過(guò)Unmarshal將JSON格式的數(shù)據(jù)轉(zhuǎn)成Person結(jié)構(gòu)體實(shí)例,然后通過(guò)對(duì)Address數(shù)組進(jìn)行遍歷操作,輸出每個(gè)Address實(shí)例的Province、City和Street屬性。

關(guān)于“Golang怎么進(jìn)行struct轉(zhuǎn)換”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“Golang怎么進(jìn)行struct轉(zhuǎn)換”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

標(biāo)題名稱:Golang怎么進(jìn)行struct轉(zhuǎn)換
轉(zhuǎn)載來(lái)源:http://bm7419.com/article20/jdedjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT網(wǎng)站營(yíng)銷、企業(yè)建站全網(wǎng)營(yíng)銷推廣、虛擬主機(jī)、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)