## once [sync.Once](https://golang.org/pkg/sync/#Once) решает задачу ленивой инициализации. Как правило, `sync.Once` используется для того, чтобы гарантировать, что некоторый код многопоточной программы будет выполнен ровно один раз. ### Что нужно сделать? Нужно написать реализацию Once используя каналы. Использование пакета [sync](https://golang.org/pkg/sync) в этой задаче запрещено! ```go type Once struct {} func (o *Once) Do(f func()) {} ``` `Do` вызывает функцию `f` тогда и только тогда, когда `Do` вызывается впервые для данного экземпляра `Once`. Важное свойство: код `f` должен завершиться до того, как завершится любой из конкурентных `Do`.