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

Susan Sarandon
Freigeben: 2024-10-24 17:43:02
Original
366 Leute haben es durchsucht

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[:])
Nach dem Login kopieren

Beitritt:

u.Pwhash = hex.EncodeToString(sha1.Sum([]byte(uf.Pwd))[:])
Nach dem Login kopieren

Der geänderte Code löst den Fehler aus:

invalid operation sha1.Sum(([]byte)(uf.Pwd))[:] (slice of unaddressable value)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!