github.com/tsavola/unsync (go): Package unsync provides a lock type which can be initially used for mutual exclusion, but avoids synchronization overhead in the long run.  The trade-off is that an extra heap-allocation may be needed, and the total memory usage is higher than with sync.Mutex.  But after the synchronization period is over, the allocation is released and remaining memory usage is comparable to sync.Mutex (on 32-bit systems it is even lower).
Keywords: go|mutex