Heim >Backend-Entwicklung >Golang >Warum verursacht ein „sha1.Sum'-Slice in Go den Fehler „Ungültige Operation: Slice mit nicht adressierbarem Wert'?
Unerwarteter Fehler beim Verbinden von Zeilen
Beim Versuch, den folgenden Code zu ändern, um zwei Zeilen zu verbinden, wird eine Fehlermeldung angezeigt:
Original:
hash := sha1.Sum([]byte(uf.Pwd)) u.Pwhash = hex.EncodeToString(hash[:])
Beitritt:
u.Pwhash = hex.EncodeToString(sha1.Sum([]byte(uf.Pwd))[:])
Der geänderte Code löst den Fehler aus:
invalid operation sha1.Sum(([]byte)(uf.Pwd))[:] (slice of unaddressable value)
Das Problem verstehen
Dieser Fehler entsteht, weil im geänderten Code der Rückgabewert des Funktionsaufrufs sha1.Sum direkt segmentiert wird. Funktionsrückgabewerte sind nicht adressierbar und können daher nicht aufgeteilt werden.
Adressierbarkeit in Go
In Go sind nur bestimmte Entitäten adressierbar, einschließlich:
Der Fehler tritt auf, weil sha1.Sum ein Array zurückgibt, das nur adressierbar ist, wenn es wie im Originalcode in einer lokalen Variablen gespeichert wird.
Lösung
Um das Problem zu beheben, sollte der Rückgabewert von sha1.Sum zunächst in einer lokalen Variablen gespeichert werden, um ihm eine adressierbare Referenz zu geben.
Fazit
Das Verständnis des Konzepts der Adressierbarkeit ist in Go von entscheidender Bedeutung, um solche Fehler beim Slicing von Arrays zu vermeiden. Stellen Sie immer sicher, dass die geschnittene Entität adressierbar ist, entweder direkt oder durch eine Zwischenvariablenzuweisung.
Das obige ist der detaillierte Inhalt vonWarum verursacht ein „sha1.Sum'-Slice in Go den Fehler „Ungültige Operation: Slice mit nicht adressierbarem Wert'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!