вторник, 14 апреля 2020 г.

Конструкторы в Golang

Go не имеет явных конструкторов. Идиоматический способ установки новых структур данных - это использование правильных нулевых значений в сочетании с фабричными функциями (factory functions).

Нулевое значение

Попробуйте сделать значение по умолчанию полезным и задокументируйте его поведение. Иногда это все, что нужно.

// StopWatch - это простая утилита часов.
// Его нулевое значение - это бездействующие часы 
// с total временем 0.
type StopWatch struct {
    start   time.Time
    total   time.Duration
    running bool
}

var clock StopWatch 
// Готов к использованию, инициализация не требуется.

StopWatch использует полезные нулевые значения time.Time, time.Duration и bool.

В свою очередь, пользователи StopWatch могут извлечь выгоду из его полезного нулевого значения.

Фабрика (Factory)

Если нулевого значения недостаточно, используйте фабричные функции с именем NewFoo или просто New.

Пример из пакета bufio стандартной библиотеки:

// NewScanner возвращает новый Scanner для чтения из r.
func NewScanner(r io.Reader) *Scanner {
 return &Scanner{
  r:            r,
  split:        ScanLines,
  maxTokenSize: MaxScanTokenSize,
 }
}

Использование NewScanner из пакета bufio:

scanner := bufio.NewScanner(os.Stdin)

Пример из пакета errors стандартной библиотеки:

// New возвращает error с данным text.
// Каждый вызов New возвращает отдельное error значение, 
// даже если text идентичный.
func New(text string) error {
 return &errorString{text}
}

Использование New из пакета errors:

err := errors.New("Произошла ошибка!")


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


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

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