這篇文章主要介紹了Golang怎么進(jìn)行struct轉(zhuǎn)換的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Golang怎么進(jìn)行struct轉(zhuǎn)換文章都會(huì)有所收獲,下面我們一起來看看吧。
目前創(chuàng)新互聯(lián)已為上千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、廬陽網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
首先,我們先來定義一個(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)體。
在實(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)換過程中,如果存在錯(cuò)誤,將會(huì)輸出錯(cuò)誤信息,否則輸出轉(zhuǎn)換后結(jié)果的字符串。
除了將結(jié)構(gòu)體轉(zhuǎn)成JSON格式,我們還經(jīng)常需要將JSON格式的數(shù)據(jù)轉(zhuǎn)成結(jié)構(gòu)體。在上面的例子中,我們已經(jīng)將person轉(zhuǎn)成了JSON格式,現(xiàn)在我們來將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)換過程中如果出現(xiàn)錯(cuò)誤,輸出錯(cuò)誤信息,否則輸出轉(zhuǎn)換后的Person結(jié)構(gòu)體實(shí)例。
有些情況下,數(shù)據(jù)的字段名和結(jié)構(gòu)體中字段名不一致,這時(shí)候需要進(jìn)行字段轉(zhuǎn)換。Golang中,可以通過將結(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"`
}
以上代碼中,我們在結(jié)構(gòu)體屬性名前添加了json tag,它指定了JSON的屬性名。在轉(zhuǎn)換過程中,如果tag存在,將以tag為準(zhǔn)。
在結(jié)構(gòu)體中,可能會(huì)存在包含數(shù)組的屬性。對于這種情況,我們需要對數(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ù)組,我們需要對其進(jìn)行遍歷。在轉(zhuǎn)換過程中,我們可以通過Unmarshal將JSON格式的數(shù)據(jù)轉(zhuǎn)成Person結(jié)構(gòu)體實(shí)例,然后通過對Address數(shù)組進(jìn)行遍歷操作,輸出每個(gè)Address實(shí)例的Province、City和Street屬性。
關(guān)于“Golang怎么進(jìn)行struct轉(zhuǎn)換”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Golang怎么進(jìn)行struct轉(zhuǎn)換”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。