trylock uses unsafe, which is sorta "unsafe", but should work until sync.Mutex
will change its layout (I hope it never will).
type LockedStruct struct {
mu trylock.Mutex
}
storage := &LockedStruct{}
if storage.mu.TryLock() {
// do something with storage
} else {
// return busy or use some logic for unavailable storage
}