0Pricing
Go Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. Повторение encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob и двоичное кодирование
← Назад к Go Academy