Возвращает sync.Locker, который при Lock/Unlock вызывает RLock/RUnlock того же RWMutex. Нужно когда функция принимает sync.Locker, но вы хотите передать только право на чтение (многие горутины могут держать RLock одновременно).
func readWithLock(l sync.Locker, f func()) { l.Lock(); defer l.Unlock(); f() }
readWithLock(mu.RLocker(), func() { _ = data[key] })