GO · 기초 문법
문자열 & rune & strings 패키지
Go 문자열은 바이트 슬라이스입니다. 한글 처리 시 rune 변환이 필요합니다.
기초 문법중급stringrunebytestringsBuilder
핵심 설명
Go 문자열은 바이트 슬라이스입니다. 한글 처리 시 rune 변환이 필요합니다.
Go code
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())
}학습 팁
strings.Builder는 문자열을 반복적으로 연결할 때 매우 효율적입니다. + 연산자로 루프에서 문자열을 합치면 O(n²) 성능이 됩니다.
주의할 점
s[i]로 한글 문자열을 인덱싱하면 바이트를 반환합니다. 한글 문자 하나는 3바이트이므로 깨진 문자가 됩니다. []rune(s)[i]를 사용하세요.
자주 묻는 질문
문자열 & rune & strings 패키지란 무엇인가요?
Go 문자열은 바이트 슬라이스입니다. 한글 처리 시 rune 변환이 필요합니다.
문자열 & rune & strings 패키지 학습 시 주의할 점은 무엇인가요?
s[i] 로 한글 문자열을 인덱싱하면 바이트를 반환합니다. 한글 문자 하나는 3바이트이므로 깨진 문자가 됩니다. []rune(s)[i] 를 사용하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.