encoding/xml
Работайте с XML
«encoding/xml» — бесплатный урок Go Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Работа с XML
XML — многословный формат на основе тегов, который до сих пор часто используется в старых системах и конфигурациях. Пакет Go encoding/xml сериализует и десериализует его подобно пакету json.
Marshal в XML
xml.Marshal преобразует значение Go в байты XML.
package main
import (
"encoding/xml"
"fmt"
)
type User struct {
Name string
Age int
}
func main() {
b, _ := xml.Marshal(User{"Ann", 30})
fmt.Println(string(b))
}Теги XML
Тег xml управляет именами элементов, подобно тому как теги json управляют ключами JSON.
package main
import (
"encoding/xml"
"fmt"
)
type User struct {
Name string "xml:\"name\""
}
func main() {
b, _ := xml.Marshal(User{"Ann"})
fmt.Println(string(b))
}Корневой элемент с XMLName
Поле типа xml.Name с именем XMLName задаёт имя корневого элемента.
package main
import (
"encoding/xml"
"fmt"
)
type User struct {
XMLName xml.Name "xml:\"user\""
Name string "xml:\"name\""
}
func main() {
b, _ := xml.Marshal(User{Name: "Ann"})
fmt.Println(string(b))
}Атрибуты
Добавьте ,attr к тегу, чтобы представить поле как атрибут XML, а не как дочерний элемент.
package main
import (
"encoding/xml"
"fmt"
)
type User struct {
XMLName xml.Name "xml:\"user\""
ID int "xml:\"id,attr\""
Name string "xml:\"name\""
}
func main() {
b, _ := xml.Marshal(User{ID: 7, Name: "Ann"})
fmt.Println(string(b))
}Unmarshal XML
xml.Unmarshal разбирает байты XML по указателю, сопоставляя имена элементов с тегами.
package main
import (
"encoding/xml"
"fmt"
)
type User struct {
Name string "xml:\"name\""
}
func main() {
var u User
xml.Unmarshal([]byte("<User><name>Bob</name></User>"), &u)
fmt.Println(u.Name)
}Вложенные элементы
Вложенные структуры соответствуют вложенным элементам XML, образуя дерево.
package main
import (
"encoding/xml"
"fmt"
)
type Address struct {
City string "xml:\"city\""
}
type User struct {
Name string "xml:\"name\""
Address Address "xml:\"address\""
}
func main() {
b, _ := xml.Marshal(User{"Ann", Address{"Rome"}})
fmt.Println(string(b))
}Форматированный XML
xml.MarshalIndent форматирует вывод с отступами для удобства чтения.
package main
import (
"encoding/xml"
"fmt"
)
type User struct {
Name string "xml:\"name\""
}
func main() {
b, _ := xml.MarshalIndent(User{"Ann"}, "", " ")
fmt.Println(string(b))
}Повторяющиеся элементы
Поле-срез становится последовательностью повторяющихся элементов XML — по одному на каждый элемент среза.
package main
import (
"encoding/xml"
"fmt"
)
type List struct {
Items []string "xml:\"item\""
}
func main() {
b, _ := xml.Marshal(List{Items: []string{"a", "b"}})
fmt.Println(string(b))
}JSON и XML
Интерфейсы похожи: Marshal, Unmarshal, MarshalIndent и теги структур. XML добавляет атрибуты и понятие корневого элемента XMLName. Для новых API предпочтительнее JSON, а XML — для устаревших систем.
Декларация заголовка
Константа xml.Header содержит стандартную строку объявления XML, которую можно добавить в начало вывода для создания полного документа.
package main
import (
"encoding/xml"
"fmt"
)
func main() {
fmt.Print(xml.Header)
}Быстрая проверка
Что делает параметр ,attr в теге структуры xml?
Итоги
encoding/xml:
xml.Marshal/Unmarshalповторяют интерфейс json- Теги xml задают имена элементов;
,attrсоздаёт атрибуты XMLNameзадаёт корневой элемент; срезы создают повторяющиеся элементы
Часто задаваемые вопросы
Урок «encoding/xml» бесплатный?
Да — полный текст урока «encoding/xml» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «encoding/xml»?
Работайте с XML Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «encoding/xml»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.