Go의 문자열
7450 단어 goprogrammingbeginners
문자열 유형
Go에서 문자열 값은 바이트 시퀀스입니다. 문자열 값은 비어 있을 수 있으며 바이트 수는 문자열의 길이라고 하며 결코 음수가 아닙니다. 문자열은 변경할 수 없습니다. 한 번 생성되면 문자열의 내용을 변경할 수 없습니다.
미리 선언된 문자열 유형은
string
입니다. 정의된 유형입니다.일반적으로 문자열의 길이
s
는 내장 함수len
를 사용하여 찾을 수 있습니다. 이 함수는 문자 수가 아니라 문자열의 바이트 수를 반환합니다. Go의 문자열은 유니코드 인코딩을 지원하기 때문에 이것은 구별이 중요합니다. 따라서 UTF-8 문자열의 문자는 1바이트 이상일 수 있습니다. 예를 들어, 이것은 Go에서 유효한 문자열입니다. 여기에 있는 일부 문자는 유효한 UTF-8도 아닙니다.const sample = "\xbd\xb2\x3d\xbc\x20\xe2\x8c\x98"
이 문자열을 stdout으로 인쇄하면 다음 출력이 생성됩니다.
��=� ⌘
문자열의 길이
이전 섹션에서 논의한 것처럼 내장 함수
len
는 문자열의 바이트 수를 반환합니다. 예를 들어 샘플 문자열이 Well done 👍🏼
이면 len
는 18
를 반환합니다.s := "Well done 👍🏼"
fmt.Printf("len(s) = %d\n", len(s))
출력은 다음과 같습니다.
len(s) = 18
이제 바이트 수 대신 문자열의 문자 수를 알고 싶다면 다른 함수를 사용해야 합니다.
RuneCountInString
의 표준 utf8
기능이 유용할 수 있습니다. 여기에서 시도해 보겠습니다.s := "Well done 👍🏼"
fmt.Printf("# of characters in s = %d\n", utf8.RuneCountInString(s))
출력은 다음과 같습니다.
# of characters in s = 12
여기에서 이 함수는 출력으로
12
를 반환했지만 문자열 11
에는 s
문자만 있습니다. 이는 함수RuneCountInString
가 문자열의 룬 수를 반환하기 때문입니다. 문자열의 각 유니코드 코드 포인트는 룬 문자로 표시됩니다. 여기에 룬 문자가 무엇인지 봅시다.s := "Well done 👍🏼"
for _, i := range []rune(s) {
fmt.Printf("%v ", i)
}
출력은 다음과 같습니다.
87 101 108 108 32 100 111 110 101 32 128077 127996
예상대로 문자열
s
에 12개의 룬 문자가 있습니다. 각 영어 알파벳은 각각의 ASCII 값과 동일한 단일 룬 리터럴이지만 이모티콘 문자에는 두 개의 룬 리터럴128077
및 127996
가 필요합니다. 여기에 사용된 이모티콘은 피부색을 표현하기 위해 별도의 룬이나 바이트가 필요하기 때문입니다. 그렇다면 실제로 문자 수를 알아내는 방법은 무엇입니까?이를 수행하는 기능을 제공하는 오픈 소스 라이브러리
github.com/rivo/uniseg
가 있습니다. 이 문자열에 있는 문자 수를 반환하는 함수GraphemeClusterCount
를 제공합니다. 작성자 및 구현에 대한 자세한 내용은 Github의 소스 코드를 확인하세요.이제 이 라이브러리를 사용해 보고 주어진 문자열에서 실제 문자 수를 얻을 수 있는지 봅시다.
import "github.com/rivo/uniseg"
s := "Well done 👍🏼"
fmt.Printf("uniseg.GraphemeClusterCount(s) = %d\n", uniseg.GraphemeClusterCount(s3))
출력은 다음과 같습니다.
uniseg.GraphemeClusterCount(s3) = 11
마지막으로 주어진 문자열의 문자 수에 대한 올바른 값을 제공하는 함수가 있습니다. 이것은 내가 테스트한 거의 모든 경우에 작동합니다. 이것을 사용하기 전에 자체 테스트를 실행하십시오.
문자열 변환
이 기사를 끝내기 전에 Go 초보자가 문자열로 작업할 때 접할 수 있는 일반적인 실수를 살펴보겠습니다. 여기에서 스니펫을 살펴보겠습니다.
s1 := string(65)
fmt.Printf("length of s1 = %d\n", len(s1))
s2 := strconv.FormatInt(65, 10)
fmt.Printf("length of s2 = %d\n", len(s2))
출력은 다음과 같습니다.
length of s1 = 1
length of s2 = 2
string(65)
가 unicode 에서 정수 65로 표시되는 문자를 반환하기 때문입니다. 이 경우 해당 값은 character A
입니다. 따라서 s1
의 길이는 1입니다. 실제로 정수를 문자열로 변환하려면 FormatInt
패키지의 strconv
함수를 사용하십시오. 여기서 strconv.FormatInt(65, 10)
는 65
의 10진수 표현을 문자열로 변환합니다. 따라서 변수 s2
는 "65"
로 설정되고 s2
의 길이는 2입니다.참조:
소프트웨어 개발 및 프로그래밍과 관련된 더 많은 기사를 읽고 싶다면 내 blog 를 확인하십시오.
Reference
이 문제에 관하여(Go의 문자열), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/abvarun226/strings-in-go-4p19텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)