Wichtige Go-Themen

Go Runes, Bytes and strings.Builder

Why len("héllo") is 6, how to work with characters, and how to build long strings fast.

  • Fortgeschritten
  • 4 Min. Lesezeit
  • 1 ausführbares Beispiel
Das lernst du
  • Bytes vs runes
  • []rune
  • strings.Builder
héllo
h0
é1-2
l3
l4
o5
5 characters, 6 bytes.

Bytes are not characters

A Go string is a sequence of bytes, and a character outside ASCII takes more than one byte. A rune is one Unicode character. Converting a string to []rune lets you work with characters instead of bytes.

héllo has 5 characters but 6 bytes, because é takes two bytes; that is why the positions printed by range jump from 1 to 3. []rune makes the characters editable. strings.Builder joins many pieces without creating a new string each time.

Das Wichtigste

  1. é takes two bytes in UTF-8.
  2. range gives runes, not bytes.
  3. []rune makes characters editable.

Ausführbares Go-Beispiel

Go
Code ausführen →
main.go
package main

import (
	"fmt"
	"strings"
	"unicode/utf8"
)

func main() {
	word := "héllo"
	fmt.Println(len(word), utf8.RuneCountInString(word))

	parts := []string{}
	for index, r := range word {
		parts = append(parts, fmt.Sprintf("%d:%c", index, r))
	}
	fmt.Println(strings.Join(parts, " "))

	runes := []rune(word)
	runes[1] = 'e'
	fmt.Println(string(runes), len(runes))

	bytes := []byte("Go")
	fmt.Println(bytes, string(bytes[0]))

	var builder strings.Builder
	for i := 3; i > 0; i-- {
		fmt.Fprintf(&builder, "%d...", i)
	}
	builder.WriteString("go!")
	fmt.Println(builder.String())
}
Run-Button für dieses Beispiel erstellen Ergebnis der Ausführung
6 5
0:h 1:é 3:l 4:l 5:o
hello 5
[71 111] G
3...2...1...go!

Üben

Öffne das Beispiel im Online-Compiler, ändere einen Wert oder füge eine Zeile hinzu und sage die Ausgabe voraus, bevor du es ausführst. Bring den Code danach absichtlich zum Scheitern und lies die Meldung des Compilers.

Lektion fertig?

Markiere sie als gelernt, um deinen Fortschritt zu verfolgen.

Weiter: Anagram Check →

Mit einer Challenge üben

Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.

Alle Challenges