Для чего нужен tag в Go?

Ответ

Тег (tag) в Go используется для добавления метаданных к полям структуры. Он задается в виде строки после типа поля и позволяет:

  1. Управлять сериализацией (JSON, XML, YAML и др.):

    type User struct {
        Name string `json:"name" xml:"username"`
        Age  int    `json:"age,omitempty"`
    }

    json:"name" указывает имя поля при кодировании в JSON, omitempty означает, что поле будет пропущено, если оно имеет нулевое значение.

  2. Валидацию (например, в библиотеках типа validator):

    type Request struct {
        Email string `validate:"required,email"`
    }

    required и email — правила валидации для поля Email.

  3. ORM-маппинг (GORM, SQLx):

    type Product struct {
        ID uint `gorm:"primaryKey;autoIncrement"`
        Name string `gorm:"type:varchar(100);uniqueIndex"`
    }

    primaryKey и autoIncrement определяют свойства поля ID в базе данных.

Теги разбираются через рефлексию (reflect пакет). Синтаксис: `key:"value"`. Значения могут содержать запятые для разделения параметров (например, json:"age,omitempty"). Можно использовать несколько тегов для одного поля, разделяя их пробелами: `json:"name" validate:"required"`.