Semaphore in Go
Initiate
import "github.com/abiosoft/semaphore"
...
sem := semaphore.New(5) // new semaphore with 5 permits
Acquire
sem.Acquire() // one
sem.AcquireMany(n) // multiple
sem.AcquireWithin(n, time.Second * 5) // timeout after 5 sec
sem.AcquireContext(ctx, n) // acquire with context
Release
sem.Release() // one
sem.ReleaseMany(n) // multiple