Menu
Coddy logo textTech

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

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

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

Exported names: видимые за пределами package

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

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

Unexported names: видимы только внутри package

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

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

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

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

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

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

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

Следование этой convention крайне важно в Go. Когда другие пакеты import ваш код, они могут получить доступ только к names, которые start с capital буквы.

challenge icon

Задание

Средне

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

  • Имени struct: productProduct
  • Всех имён field: name, price, stock
  • Всех имён function: totalValue, displayInfo
  • Всех ссылок на field внутри function

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

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