Экспортируемые и неэкспортируемые имена
Часть раздела Объектно-ориентированное программирование путешествия по 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 важно следовать этому соглашению. Когда другие пакеты импортируют ваш код, они могут обращаться только к именам, которые начинаются с заглавной буквы.
Задание
СреднеИсправь все имена в 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))
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП в Go
Внешние файлыРабочее пространство и модули GoПакеты и импортыЭкспортируемые и неэкспортируемые именаВведение в ООП в GoСтруктуры как классыОпределение методов структурПолучатели-указатели и получатели-значенияИнициализация структурФункции-конструкторыИтоги — Простой калькулятор4Интерфейсы
Введение в интерфейсыНеявная реализацияИнтерфейс как контрактПустой интерфейс (any)Утверждение типаПереключатель типовКомпозиция интерфейсовИнтерфейсы Stringer и ErrorПовторение: Калькулятор фигур7Инкапсуляция
Экспортируемые и неэкспортируемые поляИнкапсуляция на уровне пакетовГеттеры и сеттерыСокрытие информации в GoИтоги — Записи о студентах10Обобщения (Generics) (Go 1.18+)
Введение в GenericsПараметры типовОграничения типовОбобщенные структурыОбходной путь для обобщенных методовИтоги — Обобщенная коллекция13Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн Abstract FactoryПаттерн ObserverПаттерн Strategy2Глубокое погружение в типы и структуры
Базовые и составные типыОпределение пользовательских типовТеги структурАнонимные структурыВложенные структурыНулевые значения и значения по умолчаниюПовторение — Контактная книга5Композиция вместо наследования
Почему в Go нет наследованияОсновы встраивания структурПродвижение методовВстраивание нескольких структурВстраивание против агрегацииЗатенение встроенных методовИтоги — Иерархия сотрудников8Обработка ошибок и ООП
Интерфейс errorПользовательские типы ошибокОбертывание ошибок (fmt.Errorf)Sentinel-ошибкиerrors.Is() и errors.As()Panic, Defer и RecoverИтоги — Парсер файлов11Стандартная библиотека и ООП
io.Reader и io.Writersort.InterfaceИнтерфейс fmt.Stringerencoding/json со структурамиИнтерфейс http.HandlerПовторение: модели REST API14Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикMiddleware как Декоратор3Указатели и память
Основы указателей в GoУказатели на структурыПередача по значению и по ссылкеФункция new()Сборка мусора в GoПовторение: Конструктор связного списка6Полиморфизм в Go
Полиморфизм через интерфейсыУтиная типизация в GoПравила реализации интерфейсовПолиморфные коллекцииВнедрение зависимостейИтоги — Обработчик платежей9Конкурентность и ООП
Основы горутинКаналы и взаимодействиеБуферизованные и небуферизованные каналыОператор selectsync.Mutex и sync.RWMutexsync.WaitGroupПроектирование потокобезопасных структурПовторение — Worker PoolПотренируйтесь самостоятельно: Онлайн-компилятор Go