Heim  >  Artikel  >  Backend-Entwicklung  >  Warum verursacht ein „sha1.Sum“-Slice in Go den Fehler „Ungültige Operation: Slice mit nicht adressierbarem Wert“?

Warum verursacht ein „sha1.Sum“-Slice in Go den Fehler „Ungültige Operation: Slice mit nicht adressierbarem Wert“?

Susan Sarandon
Susan SarandonOriginal
2024-10-24 17:43:02366Durchsuche

Why Does a `sha1.Sum` Slice Cause an

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:

  • Variablen
  • Zeigerindirektionen
  • Slice-Indizierung
  • Feldselektoren adressierbarer Strukturen
  • Array-Indizierung mithilfe eines adressierbaren Arrays (Ausnahme: zusammengesetzte Literale )

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn