Go에서 문자열의 룬과 바이트 범위 사이의 차이점 이해
range 절을 사용하여 Go에서 문자열을 반복하는 동안 다음을 수행할 수 있습니다. 룬(rune)과 바이트(byte)라는 두 가지 데이터 유형을 접하게 됩니다. 혼란스러울 수 있으므로 왜 이런 일이 발생하는지 자세히 살펴보겠습니다.
Go 언어 정의에 따르면 문자열은 바이트의 시퀀스이며 개별 요소는 str[index]를 사용하여 인덱스로 액세스할 수 있습니다. . 그러나 for range를 사용하여 문자열을 반복하면 검색된 문자는 rune 유형입니다.
이러한 구별은 문자열의 코드 포인트(유니코드 문자)에 대한 반복을 허용하는 range 절의 정의에서 발생합니다. . 각 코드 포인트는 문자 인코딩에 따라 하나 이상의 바이트로 구성됩니다. range 절은 이러한 코드 포인트의 시작 바이트를 반복하여 해당 룬 값을 튜플의 두 번째 요소로 제공합니다.
반복 중에 잘못된 UTF-8 시퀀스가 발견되면 두 번째 값은 유니코드 대체 문자(0xFFFD) 및 반복자는 1바이트씩 진행됩니다.
문자열의 개별 바이트를 반복하려면 다음을 사용할 수 있습니다. 대안:
수동 바이트 루핑:
for i := 0; i < len(s); i++ { // Access the byte at position i in "s" }
바이트로 변환 Slice:
for i, b := range []byte(s) { // Access both the index (i) and the byte (b) }
문자열의 바이트 범위는 덜 간결하지만 특정 시나리오에서 필요할 수 있는 원시 바이트 값에 대한 액세스를 제공합니다. 룬과 바이트 범위의 차이를 이해하면 원하는 요구 사항에 맞게 Go에서 문자열을 효과적으로 조작할 수 있습니다.
위 내용은 Go 문자열: 룬 대 바이트 반복: 언제 어느 것을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!