суббота, 27 июля 2019 г.

ООП в Golang: public vs. private (публичный против частного)

Пакет - это самая маленькая единица частной инкапсуляции в 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)


Читайте также:


Комментариев нет:

Отправить комментарий