go / beginner
Snippet
String-Indexierung und Slicing
Go-Strings sind Byte-Arrays, keine Rune-Arrays. `len(s)` gibt Byte-Anzahl zurück, was sich bei Unicode unterscheidet. Verwende `len([]rune(s))` für tatsächliche Zeichenanzahl. Slice Bytes direkt mit `s[:5]` aber verwende Runes für Zeichenoperationen.
snippet.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package mainimport ("fmt""strings")func main() {s := "Hello, 世界"fmt.Printf("Length in bytes: %d\n", len(s))fmt.Printf("Length in runes: %d\n", len([]rune(s)))fmt.Println("First 5 bytes:", s[:5])fmt.Println("First rune:", string([]rune(s)[:1]))fmt.Println("Contains 'World':", strings.Contains(s, "World"))fmt.Println("Contains '世界':", strings.Contains(s, "世界"))fmt.Println("HasPrefix 'Hello':", strings.HasPrefix(s, "Hello"))fmt.Println("Join:", strings.Join([]string{"a","b"}, "-"))}
Erklärung
1
len(s)
Gibt 13 Bytes zurück (H,e,l,l,o,',',space = 7 ASCII + 3 Bytes pro chinesisches Zeichen * 2)
2
len([]rune(s))
Gibt 8 Runes zurück (tatsächliche Zeichen)
3
s[:5]
Slice die ersten 5 Bytes, funktioniert für ASCII
4
strings.Contains(s, "世界")
Funktioniert korrekt mit Unicode-Strings