Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpXmNs 191 of 280 menu
◀ ▶

Вложенный элемент в разметке в Go

Поле с типом структуры превращается во вложенный элемент внутри родительского тега. Имя внутреннего узла задают меткой у поля или именем типа, если метки нет.

Так описывают составные данные: адрес внутри пользователя, параметры внутри запроса. Сборка строит дерево тегов, разбор заполняет вложенные поля по соответствующим узлам.

Объявим пользователя с вложенным адресом и соберем текст:

package main import ( "encoding/xml" "fmt" ) type Address struct { City string `xml:"city"` } type User struct { Name string `xml:"name"` Addr Address `xml:"address"` } func main() { u := User{ Name: "ann", Addr: Address{City: "oslo"}, } data, err := xml.Marshal(u) if err != nil { fmt.Println("error") return } fmt.Println(string(data)) }

Внутри User появляется блок address с элементом city. Поле Addr не печатается отдельным тегом с таким именем: в текст идет имя из метки address.

Разберем готовый текст с тем же деревом:

package main import ( "encoding/xml" "fmt" ) type Address struct { City string `xml:"city"` } type User struct { Name string `xml:"name"` Addr Address `xml:"address"` } func main() { raw := []byte(`<User><name>ann</name><address><city>oslo</city></address></User>`) var u User err := xml.Unmarshal(raw, &u) if err != nil { fmt.Println("error") return } fmt.Println(u.Addr.City) }

Даны структуры:

type Size struct { W int `xml:"w"` H int `xml:"h"` } type Box struct { Label string `xml:"label"` Dim Size `xml:"size"` }

Соберите текст для коробки с подписью "a" и размером 2 на 3 и выведите результат.

Дан текст:

raw := []byte(`<Box><label>a</label><size><w>2</w><h>3</h></size></Box>`)

Разберите его в Box и выведите ширину из вложенного поля.

Дана структура:

type Inner struct { Val int `xml:"val"` } type Outer struct { Core Inner `xml:"core"` }

Укажите имя вложенного элемента для поля Core без запуска программы.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить