Go Strings and Runes
Read text without assuming that one byte always means one character.
How it works
A string is an immutable sequence of bytes. A rune is an alias for int32 and commonly represents a Unicode code point. len reports bytes for a string; range decodes UTF-8 into runes. A user-perceived character may contain several code points.
Run this Go example
Install Go separately from the official Go downloads and check go version in a new terminal. The reviewed baseline is Go 1.27.3 on Windows amd64; the authored syntax and standard-library APIs require Go 1.22 or newer. Save the complete source below as strings-runes.go in a learning folder, then run go run strings-runes.go from that folder. These examples use only the standard library.
Bhylu has no Go browser runner. Apache, MySQL, PHP and the JavaScript or Python playground are not required to run these files. File examples own a temporary directory; HTTP client examples create an ephemeral loopback server and close it. They do not contact an external API.
Download the complete strings-runes.go · Download all source files with hash checks
For the optional collection download, save download-examples.mjs in a new learning folder and run node download-examples.mjs. A local preview uses node download-examples.mjs http://127.0.0.1:8000/examples/go/. The downloader refuses an existing bhylu-go-examples folder and installs or executes no Go code.
Example
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
label := "Box café"
fmt.Println(len(label), utf8.RuneCountInString(label))
for _, r := range "Aé" {
fmt.Printf("%c ", r)
}
fmt.Println()
}
Expected result
9 8 A é
The accented letter occupies two UTF-8 bytes but one rune here. A byte offset can split an encoded rune, so choose bytes or runes according to the task.
For language rules and APIs, use the Go language specification and standard-library documentation. The fictional examples are learning fixtures, not a deployed parcel service.