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

Имя элемента в разметке в Go

Метка поля с ключом xml задает имя элемента в тексте, отличное от имени поля в Go. Без метки для экспортируемого поля имя элемента совпадает с именем поля, а корневой тег берут из имени типа структуры.

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

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

package main import ( "encoding/xml" "fmt" ) type User struct { Name string `xml:"name"` Age int `xml:"age"` } func main() { u := User{Name: "ann", Age: 20} data, err := xml.Marshal(u) if err != nil { fmt.Println("error") return } fmt.Println(string(data)) }

На экране фрагмент с тегами name и age внутри корня User. Имена внутренних элементов взяты из меток, а не из имен полей в коде.

Разберем тот же текст обратно в структуру:

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

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

type Row struct { Code int `xml:"code"` Note string `xml:"note"` }

Соберите текст для значения с кодом 7 и заметкой "ok" и выведите его.

Дан текст:

raw := []byte(`<User><name>kim</name><age>30</age></User>`)

Разберите его в User с метками как в примере и выведите имя с возрастом.

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

type Pair struct { Left int `xml:"left"` Right int `xml:"right"` }

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

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