Экспортируемые идентификаторы

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

Синтаксис

gotype ExportedType struct {
  ExportedField   int
  unexportedField int
}

func ExportedFunction() {}
func unexportedFunction() {}

const ExportedConst = 42
const unexportedConst = 42

var ExportedVar = 10
var unexportedVar = 10

Пример

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

gopackage mypackage

type Person struct {
  Name string
  age  int
}

func (p Person) GetName() string {
  return p.Name
}

func (p Person) getAge() int {
  return p.age
}

var PublicVar = "public"
var privateVar = "private"

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

go"package mypackage created with exported and unexported identifiers"

Пример

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

gopackage main

import (
  "fmt"
  "mypackage"
)

func main() {
  p := mypackage.Person{Name: "Alice"}
  fmt.Println(p.GetName())
  fmt.Println(p.PublicVar)
}

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

go"Alice"
"public"

Пример

Попробуем обратиться к неэкспортируемым идентификаторам - это вызовет ошибку компиляции:

gopackage main

import (
  "fmt"
  "mypackage"
)

func main() {
  p := mypackage.Person{Name: "Alice"}
  fmt.Println(p.age)
  fmt.Println(p.privateVar)
}

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

go"cannot refer to unexported field age in struct literal"

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