Menu
Coddy logo textTech

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

Часть раздела Объектно-ориентированное программирование путешествия по GO на Coddy — урок 4 из 107.

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

Экспортируемые имена — видимы за пределами пакета

type User struct {
    Name  string  // Экспортируемое поле
    Email string  // Экспортируемое поле
}

func CreateUser(name string) User { // Экспортируемая функция
    return User{Name: name}
}

Неэкспортируемые имена — видимы только внутри пакета

type secret struct {     // Неэкспортируемая структура
    password string      // Неэкспортируемое поле
}

func validate() bool {   // Неэкспортируемая функция
    return true
}

Смешанный тип — экспортируемая структура с некоторыми неэкспортируемыми полями

type Account struct {
    Username string    // Экспортируемое — доступно везде
    Email    string    // Экспортируемое — доступно везде
    password string    // Неэкспортируемое — только внутри пакета
}

Это соглашение об именовании заменяет модификаторы доступа, такие как public и private, встречающиеся в других языках.

// Заглавная буква   = Экспортируемый (публичный)
// Строчная буква = Неэкспортируемый (приватный)

func SaveData() {}  // Экспортируемый
func loadData() {}  // Неэкспортируемый

Соблюдение этого соглашения имеет важное значение в Go. Когда другие пакеты импортируют ваш код, они могут получить доступ только к именам, начинающимся с заглавной буквы.

challenge icon

Задание

Средне

Исправьте все имена в product.go, чтобы они соответствовали соглашению об именовании экспортируемых сущностей в Go. Сделайте заглавной первую букву в:

  • Имени структуры: productProduct
  • Всех именах полей: name, price, stock
  • Всех именах функций: totalValue, displayInfo
  • Всех ссылках на поля внутри функций

Шпаргалка

В Go первая буква имени определяет его видимость:

  • Заглавная буква = Экспортируемое (доступно из других пакетов)
  • Строчная буква = Неэкспортируемое (приватное для пакета)

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

type User struct {
    Name  string  // Экспортируемое поле
    Email string  // Экспортируемое поле
}

func CreateUser(name string) User { // Экспортируемая функция
    return User{Name: name}
}

Неэкспортируемые имена:

type secret struct {     // Неэкспортируемая структура
    password string      // Неэкспортируемое поле
}

func validate() bool {   // Неэкспортируемая функция
    return true
}

Смешанная видимость:

type Account struct {
    Username string    // Экспортируемое — доступно везде
    Email    string    // Экспортируемое — доступно везде
    password string    // Неэкспортируемое — только внутри пакета
}

Это соглашение об именовании заменяет модификаторы доступа, такие как public и private, встречающиеся в других языках.

Попробуйте сами

package main

import "fmt"

func main() {
    var name string
    var price float64
    var stock int
    fmt.Scan(&name, &price, &stock)

    p := Product{
        Name:  name,
        Price: price,
        Stock: stock,
    }

    fmt.Println(DisplayInfo(p))
    fmt.Printf("Total Value: %.2f\n", TotalValue(p))
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование