


Warum schlägt die Konvertierung von uint8 in int8 mit einer Konstante in Go fehl?
Oct 31, 2024 am 06:48 AMVerwirrung über die Konvertierung von uint8 in int8
Bei der Konvertierung eines uint8 (vorzeichenlose 8-Bit-Ganzzahl) in einen int8 (vorzeichenbehaftete 8-Bit-Ganzzahl). ), ist das Ergebnis möglicherweise nicht immer wie erwartet. In diesem Artikel werden die Unterschiede zwischen den folgenden beiden Ansätzen untersucht und erklärt, warum der erste einen Kompilierungsfehler auslöst:
<code class="go">a := int8(0xfc) // compile error // deferring type conversion a := 0xfc b := int8(a) </code>
Der Unterschied zwischen den Codes
Der Unterschied zwischen Die beiden Codes liegen in der Reihenfolge der Operationen:
- Im ersten Beispiel erfolgt die Typkonvertierung (int8(0xfc)). vor der Zuweisung, während im zweiten Beispiel die Zuweisung (a := 0xfc) vor der Typkonvertierung (int8(a)) erfolgt.
Kompilierungsfehler im ersten Code
Der erste Code löst einen Kompilierungsfehler aus, da die Konstante 0xfc den Bereich des Typs int8 überschreitet. int8 kann Werte zwischen -128 und 127 darstellen, während 0xfc den Dezimalwert 252 hat, was diesen Bereich überschreitet. Gemäß der Go-Sprachspezifikation müssen konstante Ausdrücke immer genau durch Werte des konstanten Typs darstellbar sein.
Legale und illegale konstante Ausdrücke
Siehe https:// golang.org/ref/spec#Constant_expressions für eine detaillierte Erklärung der zulässigen und illegalen konstanten Ausdrücke. Der Blogbeitrag unter https://blog.golang.org/constants bietet zusätzliche Einblicke in die Einschränkungen von Ganzzahltypen und die Bedeutung der Typprüfung von Konstanten zum Erkennen von Fehlern.
Lösung des Konvertierungsproblems
Wenn Ihr Ziel darin besteht, ein Byte (das ein uint8 ist) in ein int32 umzuwandeln und dabei dessen Vorzeichen zu berücksichtigen, besteht die empfohlene Vorgehensweise darin, es zunächst in zu konvertieren ein int8 und dann zu einem int32:
<code class="go">var b byte = 0xff i32 := int32(int8(b)) // -1</code>
Das obige ist der detaillierte Inhalt vonWarum schlägt die Konvertierung von uint8 in int8 mit einer Konstante in Go fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hot-Tools-Tags

Heißer Artikel

Hot-Tools-Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?

Wie kann ich Linter und statische Analyse -Tools verwenden, um die Qualität und Wartbarkeit meines GO -Codes zu verbessern?

Wie schreibe ich Dateien in Go Language bequem?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?
