Practical Examples
func substringExample() {
text := "Hello, 世界"
runes := []rune(text)
// Extract substring by rune indices
substring := string(runes[2:5])
fmt.Println(substring)
}
Character Counting and Validation
func stringAnalysis() {
text := "Hello, 世界"
// Count total characters
charCount := utf8.RuneCountInString(text)
// Check if valid UTF-8
isValid := utf8.ValidString(text)
fmt.Printf("Character Count: %d\n", charCount)
fmt.Printf("Valid UTF-8: %v\n", isValid)
}
graph LR
A[String Analysis] --> B[Character Counting]
A --> C[UTF-8 Validation]
Handling Multi-Language Strings
func multiLanguageProcessing() {
languages := []string{
"Hello, World!", // English
"こんにちは", // Japanese
"Привет, мир!", // Russian
"你好,世界!" // Chinese
}
for _, lang := range languages {
runes := []rune(lang)
fmt.Printf("Text: %s\n", lang)
fmt.Printf("Length: %d\n", len(runes))
}
}
Indexing Method |
Performance |
Use Case |
Byte Indexing |
Fastest |
ASCII-only strings |
Rune Indexing |
Moderate |
Multilingual text |
utf8 Package |
Precise |
Complex text processing |
String Manipulation Techniques
func stringManipulation() {
text := "Hello, 世界"
// Reverse a string
runes := []rune(text)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
reversed := string(runes)
fmt.Println(reversed)
// Find character position
position := strings.IndexRune(text, '世')
fmt.Printf("Position of '世': %d\n", position)
}
Error Handling in UTF-8
func errorHandling() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from UTF-8 error")
}
}()
// Potential UTF-8 error scenario
invalidText := []byte{0xFF, 0xFE}
utf8.DecodeRune(invalidText)
}
Real-World Applications
- Text processing
- Internationalization
- Data validation
- Search algorithms
At LabEx, mastering these techniques ensures robust string handling across diverse linguistic contexts in Golang.