Доступ к полям структуры

Доступ к полям структуры в Go осуществляется с помощью оператора точки .. Мы можем как получать значение поля, так и изменять его. Если структура определена в другом пакете, то доступны только экспортируемые поля (с именами, начинающимися с заглавной буквы).

Синтаксис

goinstance.FieldName

Пример

Давайте определим структуру Person и обратимся к ее полям:

gopackage main

import "fmt"

type Person struct {
  Name string
  Age  int
}

func main() {
  p := Person{Name: "Alice", Age: 30}
  fmt.Println(p.Name)
  fmt.Println(p.Age)
}

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

go"Alice"
30

Пример

Давайте изменим значение поля структуры:

gopackage main

import "fmt"

type Person struct {
  Name string
  Age  int
}

func main() {
  p := Person{Name: "Bob", Age: 25}
  p.Age = 26
  fmt.Println(p.Age)
}

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

go26

Пример

Если структура является указателем, доступ к полям также осуществляется через точку (Go автоматически разыменовывает указатель):

gopackage main

import "fmt"

type Person struct {
  Name string
  Age  int
}

func main() {
  p := &Person{Name: "Charlie", Age: 22}
  fmt.Println(p.Name)
  p.Age = 23
  fmt.Println(p.Age)
}

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

go"Charlie"
23

Пример

Попытка доступа к неэкспортируемому полю из другого пакета приведет к ошибке компиляции. В этом примере поле age неэкспортируемое:

gopackage main

import "fmt"

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

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

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

go"Dave"

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