Экспортируемые поля структуры

Экспортируемые поля структуры в Go - это поля, имена которых начинаются с заглавной буквы. Такие поля доступны для чтения и записи из других пакетов, в отличие от неэкспортируемых полей, которые начинаются со строчной буквы и видны только внутри своего пакета. Экспортируемые поля являются важной частью API пакета и позволяют другим пакетам взаимодействовать с данными структуры.

Синтаксис

gotype StructName struct {
  ExportedField   type
  unexportedField type
}

Пример

Давайте создадим структуру с экспортируемым полем в одном пакете и используем ее в другом:

go// package person
package person

type User struct {
  Name string // экспортируемое поле
  Age  int  // экспортируемое поле
}
go// package main
package main

import (
  "fmt"
  "person"
)

func main() {
  user := person.User{
    Name: "John",
    Age:  30,
  }

  fmt.Println(user.Name)
  fmt.Println(user.Age)
}

Результат выполнения кода:

go"John"
"30"

Пример

Попробуем обратиться к неэкспортируемому полю из другого пакета:

go// package person
package person

type User struct {
  Name string
  age  int // неэкспортируемое поле
}
go// package main
package main

import (
  "fmt"
  "person"
)

func main() {
  user := person.User{
    Name: "John",
    age:  30, // ошибка: нельзя обратиться к неэкспортируемому полю
  }
  fmt.Println(user.age) // ошибка компиляции
}

Пример

Рассмотрим изменение экспортируемого поля через метод:

gopackage main

import "fmt"

type User struct {
  Name string
  Age  int
}

func (u *User) SetAge(age int) {
  u.Age = age
}

func main() {
  user := User{
    Name: "Alice",
    Age:  25,
  }

  fmt.Println(user.Age)
  user.SetAge(26)
  fmt.Println(user.Age)
}

Результат выполнения кода:

go"25"
"26"

Смотрите также

  • объявление структуры struct,
    которое определяет новый тип данных
  • поля структуры fields,
    которые хранят данные внутри структуры
  • теги структуры tags,
    которые добавляют метаданные к полям
  • доступ к полям field-access,
    который позволяет читать и изменять значения полей