Пакет - это самая маленькая единица частной инкапсуляции в Go.
- Все идентификаторы, определенные в пакете, видны во всем этом пакете.
- При импорте пакета вы можете получить доступ только к его экспортированным идентификаторам.
- Идентификатор экспортируется, если он начинается с заглавной буквы.
Экспортируемые и неэкспортированные идентификаторы используются для описания открытого интерфейса пакета и для защиты от определенных ошибок программирования.
Предупреждение. Неэкспортированные идентификаторы не являются мерой безопасности и не скрывают и не защищают какую-либо информацию.
Пример. В следующем пакете единственными экспортируемыми идентификаторами являются StopWatch и Start.
package timer
import "time"
// StopWatch - это простая утилита часов.
// Его нулевое значение - это бездействующие часы с общим временем 0.
type StopWatch struct {
start time.Time
total time.Duration
running bool
}
// Start включает часы.
func (s *StopWatch) Start() {
if !s.running {
s.start = time.Now()
s.running = true
}
}
StopWatch и его экспортируемые методы могут быть импортированы и использованы в другом пакете.
package main
import "timer"
func main() {
clock := new(timer.StopWatch)
clock.Start()
if clock.running { // Недопустимо
// …
}
}
../main.go:8:15: clock.running undefined (cannot refer to unexported field or method clock.running)
Читайте также:
- ООП в Golang: методы не для классов, но для типов
- Объектно-ориентированное программирование с наследованием в Golang
- Go FAQ: Является ли Go объектно-ориентированным языком?
Комментариев нет:
Отправить комментарий