Menu
CoddyTech

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

Часть раздела Объектно-ориентированное программирование путешествия по 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 об именовании экспортируемых элементов. Сделай первую букву заглавной у:

  • имени структуры: product → Product
  • всех имён полей: name, price, stock
  • всех имён функций: totalValue, displayInfo
  • всех обращений к полям внутри функций

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

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Проверьте себя

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор Go