Sobes.tech
Junior — Middle

Ist es möglich, sichere Daten aus einer Map-Datenstruktur ohne Fehler zu lesen?

sobes.tech KI

Antwort von AI

In Go ist das Lesen aus einer Map sicher, wenn in diesem Moment niemand die Map verändert. Wenn jedoch gleichzeitig geschrieben wird (Hinzufügen, Entfernen oder Ändern von Elementen), kann das Lesen zu einem Panic (Laufzeitfehler) führen.

Um in einer Multithread-Umgebung sicher aus einer Map zu lesen, verwendet man in der Regel:

  • sync.RWMutex — um die Map für Schreibzugriffe zu sperren und paralleles Lesen zu ermöglichen
  • sync.Map — eine spezialisierte, threadsichere Datenstruktur für Maps

Beispiel mit RWMutex:

var (
    m = make(map[string]int)
    mu sync.RWMutex
)

func read(key string) (int, bool) {
    mu.RLock()
    defer mu.RUnlock()
    val, ok := m[key]
    return val, ok
}

func write(key string, val int) {
    mu.Lock()
    defer mu.Unlock()
    m[key] = val
}

Auf diese Weise ist sicheres Lesen möglich, wenn die Synchronisation mit der Schreiboperation gewährleistet ist.