func (*Once) Do
func (o *Once) Do(f func())
Do вызывает функцию f только тогда, когда Do вызывается впервые для этого экземпляра Once.
Другими словами:
var once Once
Если once.Do(f) вызывается несколько раз, только первый вызов вызовет f, даже если f имеет новое значение в каждом вызове. Для выполнения каждой функции требуется новый экземпляр Once.
Do предназначен для инициализации, которая должна выполняться ровно один раз. Поскольку f является niladic, может потребоваться использование литерала функции для захвата аргументов функции, которая будет вызываться функцией Do:
config.once.Do(func() { config.init(filename) })
Поскольку вызов Do не возвращается до тех пор, пока первый вызов f не вернется, если f вызывает вызов Do, он будет блокирован.
Если f падает в панике, Do, считает, что он вернулся; будущие вызовы Do возвращаются без вызова f.