Do calls the function f if and only if Do has not been invoked
without error for this instance of Once. In other words, given

var once Once

if once.Do(f) is called multiple times, only the first call will
invoke f, even if f has a different value in each invocation unless
f returns an error. A new instance of Once is required for each
function to execute.

Do is intended for initialization that must be run exactly once. Since f
is niladic, it may be necessary to use a function literal to capture the
arguments to a function to be invoked by Do:

Acquire will deduct n units from the semaphore. If the deduction would
result in the available units falling below zero, the call will block until
another go routine returns units via a call to Release. If more units are
requested than the semaphore is configured to hold, error will be non-nil.