Junior
Wie funktionieren Strings in der Programmiersprache Go?
sobes.tech KI
Antwort von AI
Zeichenketten in Go sind unveränderliche Sequenzen von Bytes. Sie stellen einen "Byte-Schnitt" ([]byte) mit Garantie der Unveränderlichkeit dar.
Wichtige Merkmale:
- Unveränderlichkeit: Nach der Erstellung kann eine Zeichenkette nicht mehr geändert werden. Jede Operation, die eine Änderung zu sein scheint, erstellt tatsächlich eine neue Zeichenkette.
- Darstellung: Standardmäßig stellen Zeichenketten in Go UTF-8-kodierten Text dar. Sie sind jedoch einfach Byte-Sequenzen; die Interpretation als UTF-8 erfolgt bei der Arbeit mit Runen.
- Runen: Unicode-Zeichen in Go werden durch den Typ
runedargestellt, der ein Alias fürint32ist. Die Iteration über eine Zeichenkette mitrangedecodiert automatisch UTF-8 und liefert Runen und deren Anfangsindizes in Bytes. - Länge: Die Funktion
len(s)gibt die Anzahl der Bytes in der Zeichenkette zurück, nicht die Anzahl der Zeichen (Runen). Um die Anzahl der Runen zu erhalten, verwenden Sieutf8.RuneCountInString(s)oder iterieren Sie mitrange. - Verkettung: Zum Verbinden von Zeichenketten wird der Operator
+verwendet. Dies erstellt eine neue Zeichenkette. Für eine effiziente Verkettung vieler Zeichenketten wirdstrings.Builderempfohlen.
Beispiele:
// Deklaration einer Zeichenkette
str := "Hello, 世界"
// Länge der Zeichenkette (in Bytes)
byteLen := len(str) // 13 (H(1) e(1) l(1) l(1) o(1) ,(1) (1) 世(3) 界(3))
// Iteration über die Runen
runeCount := 0
for index, runeValue := range str {
// index - Anfangsindex der Rune in Bytes
// runeValue - die Rune
runeCount++
// fmt.Printf("Index: %d, Rune: %c (Wert: %d)\n", index, runeValue, runeValue)
}
// runeCount - Anzahl der Runen (9)
// Zugriff auf ein Byte nach Index
// Achtung: Das ist ein Byte, kein Zeichen!
// byteAtIndex := str[0] // 'H'
// byteAtIndex := str[7] // Anfangsbyte des Zeichens '世'
// Verkettung von Zeichenketten
newStr := str + "!"
// Verwendung von strings.Builder für effiziente Verkettung
// import "strings"
var builder strings.Builder
builder.WriteString("Hello, ")
builder.WriteString("World")
effizienteZeichenkette := builder.String() // "Hello, World"