Go 문자열은 바이트 슬라이스입니다. 한글 처리 시 rune 변환이 필요합니다.
package main
import (
"fmt"
"strings"
"unicode/utf8"
)
func main() {
s := "Hello, 세계"
// 바이트 vs rune
fmt.Println("바이트 길이:", len(s)) // 13
fmt.Println("문자(rune) 수:", utf8.RuneCountInString(s)) // 9
// 바이트 순회 (한글 깨짐)
for i, b := range []byte(s) {
if i < 7 { fmt.Printf("%d:%c ", i, b) }
}
fmt.Println()
// rune 순회 (올바른 한글 처리)
for i, r := range s {
fmt.Printf("%d:%c ", i, r)
}
fmt.Println()
// rune 슬라이싱
runes := []rune(s)
fmt.Println("첫 5자:", string(runes[:5])) // Hello
// strings 패키지
fmt.Println(strings.ToUpper("hello")) // HELLO
fmt.Println(strings.Contains(s, "세계")) // true
fmt.Println(strings.HasPrefix(s, "Hello")) // true
fmt.Println(strings.Replace(s, "Hello", "Hi", 1))
fmt.Println(strings.Split("a,b,c", ",")) // [a b c]
fmt.Println(strings.Join([]string{"x","y"}, "-")) // x-y
fmt.Println(strings.TrimSpace(" hello ")) // hello
fmt.Println(strings.Count(s, "l")) // 2
// strings.Builder — 효율적 문자열 조합
var b strings.Builder
for i := 0; i < 5; i++ {
fmt.Fprintf(&b, "item%d ", i)
}
fmt.Println(b.String())
}