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("Произошла ошибка!")
Читайте также:
- Паттерны в Golang: Factory Method (Фабричный метод)
- Эффективный Go: конструкторы и составные литералы
- Основы Go: структуры (struct)
Комментариев нет:
Отправить комментарий