Go에서 문자열을 분할하는 방법
Wenhao Wang
Dev Intern · Leapcell

Key Takeaways
- Go는
strings.Fields
,strings.Split
,strings.FieldsFunc
를 포함하여 문자열을 분할하는 여러 함수를 제공합니다. - 정규 표현식은 복잡한 문자열 분할 시나리오에 사용될 수 있습니다.
- 올바른 메서드를 선택하는 것은 구분 기호 유형과 분할 조건의 복잡성에 따라 달라집니다.
문자열 조작은 프로그래밍의 기본적인 측면이며, 특정 구분 기호를 기반으로 문자열을 부분 문자열로 분할하는 것은 일반적인 작업입니다. Go에서 strings
패키지는 이러한 작업을 효율적으로 처리하기 위한 다양한 함수를 제공합니다. 이 기사에서는 공백, 특정 문자 또는 문자열, 여러 문자 및 정규 표현식을 사용하여 Go에서 문자열을 분할하는 다양한 방법을 살펴봅니다.
공백으로 분할
공백으로 문자열을 분할하기 위해 Go는 strings.Fields
함수를 제공합니다. 이 함수는 입력 문자열을 공백 문자를 기준으로 부분 문자열로 나누고 이러한 부분 문자열의 슬라이스를 반환합니다.
package main import ( "fmt" "strings" ) func main() { str := " foo bar baz " fields := strings.Fields(str) fmt.Printf("Fields are: %q\n", fields) }
출력:
Fields are: ["foo" "bar" "baz"]
이 예에서 strings.Fields
는 선행 및 후행 공백을 무시하고 각 공백 문자 시퀀스에서 문자열을 분할합니다.
특정 문자 또는 문자열로 분할
특정 문자 또는 부분 문자열로 문자열을 분할하기 위해 strings.Split
함수가 사용됩니다. 이 함수는 입력 문자열과 구분 기호를 가져와 구분 기호가 나타날 때마다 문자열을 분할합니다.
package main import ( "fmt" "strings" ) func main() { str1 := "a,b,c" split1 := strings.Split(str1, ",") fmt.Printf("%q\n", split1) str2 := "a man a plan a canal panama" split2 := strings.Split(str2, "a ") fmt.Printf("%q\n", split2) }
출력:
["a" "b" "c"]
["" "man " "plan " "canal panama"]
첫 번째 경우 문자열은 각 쉼표에서 분할됩니다. 두 번째 경우 문자열은 부분 문자열 "a "가 나타날 때마다 분할됩니다.
여러 문자로 분할
구분 기호가 여러 문자로 구성된 경우 strings.FieldsFunc
를 사용할 수 있습니다. 이 함수는 문자가 구분 기호인지 여부를 결정하는 사용자 정의 함수를 기반으로 문자열을 분할합니다.
package main import ( "fmt" "strings" "unicode" ) func main() { str := " foo1;bar2,baz3..." f := func(c rune) bool { return !unicode.IsLetter(c) && !unicode.IsNumber(c) } fields := strings.FieldsFunc(str, f) fmt.Printf("Fields are: %q\n", fields) }
출력:
Fields are: ["foo1" "bar2" "baz3"]
이 예에서 strings.FieldsFunc
는 함수 f
를 사용하여 구분 기호를 결정합니다. 함수 f
는 문자나 숫자가 아닌 문자를 구분 기호로 간주하여 문장 부호 및 공백에서 문자열을 효과적으로 분할합니다.
여러 문자열로 분할
Go 1.20부터 표준 라이브러리는 여러 부분 문자열로 문자열을 직접 분할하는 함수를 제공하지 않습니다. 그러나 이 기능은 strings.Split
에 대한 호출을 연결하거나 정규 표현식을 사용하여 달성할 수 있습니다.
package main import ( "fmt" "regexp" ) func main() { str := "Hello, This is my, first code in, Golang!" re := regexp.MustCompile(",\\s*") split := re.Split(str, -1) fmt.Println(split) }
출력:
[Hello This is my first code in Golang!]
이 예에서는 정규 표현식을 사용하여 쉼표 다음에 오는 모든 공백에서 문자열을 분할합니다.
정규 표현식을 사용하여 분할
보다 복잡한 분할 시나리오의 경우 정규 표현식은 강력한 도구를 제공합니다. regexp
패키지의 Split
메서드를 사용하면 패턴을 기반으로 문자열을 분할할 수 있습니다.
package main import ( "fmt" "regexp" ) func main() { str := "Hello :), This is my, first code in, Golang!" re := regexp.MustCompile(`:\),\\s*`) split := re.Split(str, -1) fmt.Println(split) }
출력:
[Hello This is my first code in Golang!]
여기서 정규 표현식 :\),\s*
는 스마일리 얼굴 :)
다음에 오는 모든 공백과 일치하여 문자열을 적절하게 분할합니다.
결론
Go는 strings
및 regexp
패키지를 통해 문자열을 분할하기 위한 강력한 도구를 제공합니다. 구분 기호의 특성 및 분할 조건의 복잡성과 같은 특정 요구 사항에 따라 개발자는 적절한 함수를 선택하여 문자열을 효율적으로 부분 문자열로 나눌 수 있습니다. 이러한 함수와 해당 응용 프로그램을 이해하는 것은 Go에서 효과적인 문자열 조작에 필수적입니다.
FAQs
strings.Fields
는 공백을 기준으로 분할하고 빈 필드를 무시하는 반면, strings.Split
은 지정된 구분 기호가 나타날 때마다 분할합니다.
예, 문자 기반 분할에는 strings.FieldsFunc
를 사용하거나 여러 부분 문자열로 분할하는 데는 regexp.Split
을 사용할 수 있습니다.
아니요, 그러나 정규 표현식 패턴과 함께 regexp.Split
을 사용하여 이를 달성할 수 있습니다.
저희는 Go 프로젝트 호스팅을 위한 최고의 선택인 Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하십시오.
무제한 프로젝트를 무료로 배포
- 사용량에 대해서만 지불하십시오. 요청이 없고, 요금이 없습니다.
탁월한 비용 효율성
- 유휴 요금 없이 종량제로 지불하십시오.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
손쉬운 확장성 및 고성능
- 쉬운 동시성 처리를 위한 자동 확장.
- 운영 오버헤드가 없으므로 구축에만 집중하십시오.
설명서에서 자세히 알아보십시오!
X에서 팔로우하십시오: @LeapcellHQ