Sobes.tech
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 rune dargestellt, der ein Alias für int32 ist. Die Iteration über eine Zeichenkette mit range decodiert 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 Sie utf8.RuneCountInString(s) oder iterieren Sie mit range.
  • Verkettung: Zum Verbinden von Zeichenketten wird der Operator + verwendet. Dies erstellt eine neue Zeichenkette. Für eine effiziente Verkettung vieler Zeichenketten wird strings.Builder empfohlen.

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"