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)
 

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