개요
Golang에서 다양한 문자열 자르기(string slice) 방법을 살펴보겠습니다.
기본적인 문자열 슬라이싱
Go에서 문자열은 불변(immutable) 바이트의 슬라이스입니다. 따라서 배열이나 슬라이스와 유사한 방식으로 인덱싱할 수 있습니다.
str := "Hello, World!"
fmt.Println(str[0:5]) // "Hello"
fmt.Println(str[:5]) // "Hello"
fmt.Println(str[7:]) // "World!"
fmt.Println(str[:]) // "Hello, World!"
주의: 이 방법은 바이트 단위로 작동하므로 UTF-8 인코딩된 문자열에서 멀티바이트 문자를 다룰 때는 주의가 필요합니다.
strings.Split() 함수 사용
import "strings"
str := "apple,banana,grape"
fruits := strings.Split(str, ",")
fmt.Println(fruits) // [apple banana grape]
특정 구분자를 기준으로 문자열을 자르려면 `strings.Split()` 함수를 사용할 수 있습니다.
strings.Fields() 함수 사용
공백을 기준으로 문자열을 자르려면 `strings.Fields()` 함수를 사용할 수 있습니다.
text := " Hello, World! This is Go. "
words := strings.Fields(text)
fmt.Println(words)
// 출력
// [Hello, World! This is Go.]
strings.SplitN() 함수 사용
`strings.SplitN()` 함수를 사용하면 문자열을 특정 횟수만큼만 자를 수 있습니다.
str := "a:b:c:d:e"
parts := strings.SplitN(str, ":", 3)
fmt.Println(parts) // [a b c:d:e]
정규 표현식을 이용한 문자열 자르기
복잡한 패턴으로 문자열을 자르려면 정규 표현식을 사용할 수 있습니다.
import "regexp"
str := "Hello123World456"
re := regexp.MustCompile(`\d+`)
parts := re.Split(str, -1)
fmt.Println(parts) // [Hello World]
bytes 패키지 사용 (대용량 문자열 처리)
대용량 문자열을 처리할 때는 `bytes` 패키지를 사용하는 것이 효율적일 수 있습니다.
import "bytes"
str := []byte("Hello,World,Go")
parts := bytes.Split(str, []byte(","))
for _, part := range parts {
fmt.Println(string(part))
}
// Output:
// Hello
// World
// Go
주의사항
1. UTF-8 인코딩: Go의 문자열은 UTF-8로 인코딩됩니다. 따라서 문자 단위로 자르려면 `[]rune()`을 사용해야 할 수 있습니다. (참고: Golang string 과 rune / 한글(멀티바이트) 이슈)
2. 성능: 대량의 문자열을 자주 자르는 경우, `strings.Builder`나 `bytes.Buffer`를 사용하는 것이 메모리 할당 측면에서 효율적일 수 있습니다.
3. 불변성: Go의 문자열은 불변입니다. 문자열을 자르면 새로운 문자열이 생성됩니다.
결론
Go 언어는 문자열 처리를 위한 다양한 도구를 제공합니다. 상황에 따라 적절한 방법을 선택하여 사용하면 효율적인 문자열 처리가 가능합니다.
'프로그래밍 > Golang' 카테고리의 다른 글
Golang 함수 []any(슬라이스 파라미터) 와 ...any(가변인자) (0) | 2024.08.08 |
---|---|
Golang Error 인터페이스 (0) | 2024.08.07 |
Golang 정수 타입과 아키텍처 의존성 (0) | 2024.08.06 |
Golang string 과 rune / 한글(멀티바이트) 이슈 (0) | 2024.08.06 |
Golang: 동일성(Identity) vs 동등성(Equality) (0) | 2024.08.03 |