Wie füge ich ein Zeichen an eine Zeichenfolge in Go?
anDas funktioniert nicht:
%Vor%ungültige Operation: s + c (nicht übereinstimmende Typen string und rune)
Dies funktioniert auch nicht:
%Vor%ungültige Operation: s + rune (c) (nicht übereinstimmende Typen string und rune)
In Go rune type ist nicht ein Zeichentyp, es ist nur ein anderer Name für int32.
Wenn Sie aus Java oder einer ähnlichen Sprache kommen, wird Sie das überraschen, denn Java hat einen char-Typ und Sie können einem String char hinzufügen.
%Vor%In Go müssen Sie expliziter sein:
%Vor%Omg musst du wirklich jedes char in eine Stringkonstante umwandeln? Ja, aber keine Sorge, das liegt an einem Typsystem und der Compiler optimiert es richtig. Unter der Haube hängen sowohl Java als auch Go den Char auf die gleiche Weise an.
Wenn Sie der Meinung sind, dass Extratyping saugt, vergleichen Sie einfach, wie oft das string Schlüsselwort in jedem obigen Beispiel erscheint. :)
Zusätzliche Informationen: (technische Details)
In Go-Strings sind nicht Sequenzen von Runen, sie sind utf-8 codierte Sequenzen von Runen. Wenn du über einen String rangierst, bekommst du Runen, aber du kannst nicht einfach eine Rune an einen String anhängen. Zum Beispiel: Das Eurozeichen '€' ist eine Ganzzahl 0x20AC (dies wird Codepunkt genannt) Aber wenn Sie Euro-Zeichen in utf-8 codieren, erhalten Sie 3 Bytes: 0xE2 0x82 0xAC Ссылка
Das Anhängen eines Chars funktioniert also so:
%Vor%Beachten Sie, dass Codierungen zur Kompilierzeit durchgeführt werden.
Utf-8 kann ein Zeichen mit 1, 2, 3 oder 4 Byte codieren. Utf-16 kann ein Zeichen mit 2 oder mit 4 Bytes codieren.
So Go hängt normalerweise 1 Byte (für ascii) oder 2, 3, 4 Bytes für Chinesisch an, und Java hängt normalerweise 2 Bytes (für ASCII) oder 4 Bytes für Chinesisch an.
Da die meisten Zeichen, die wir (west) verwenden, mit 2 Bytes kodiert werden können, gibt Java den falschen Glauben, dass Zeichenfolgen Sequenzen von 2 Byte Zeichen sind, was wahr ist, bis Sie 美国 必须 死
codieren müssen