PHP Editor Apple 오늘은 `strings.EqualFold` 함수가 문자열이 같은지 비교할 때 길이 비교를 먼저 수행하지 않는 이유에 대해 논의하겠습니다. 문자열 비교에서는 비교 시 대소문자를 무시하기 위해 `strings.EqualFold` 함수를 사용하는 경우가 많습니다. 그러나 일부 사람들은 왜 이 함수가 길이 비교를 먼저 수행하지 않는지 궁금해할 수 있습니다. 다음 기사에서는 이 질문에 답하고 이 설계의 이론적 근거에 대해 논의할 것입니다. 한 번 보자!
대소문자를 구분하지 않는 문자열을 비교하는 일반적인 방법은 먼저 명시적으로 길이를 확인하는 것입니다.
으아아아현재 구현에서는 두 입력 문자열 중 하나가 소진된 경우에만 길이 확인을 수행하므로 이는 해결 방법인 것 같습니다.
길이 확인을 먼저 하지 않는 이유나 성능 등이 있나요?
짧은 대답은 Go 2에서 문자열의 길이가 다를 수 있지만 간단한 유니코드 대소문자 접기에서는 여전히 동일하기 때문입니다(따라서 길이 비교를 먼저 수행해도 대소문자 접기 동일성을 결정하지 않습니다).
더 긴 대답은 다음과 같습니다. Go는 문자열을 메모리에 UTF-8바이트로 저장하고 내장된 len()
함수는 UTF-8로 인코딩된 바이트 수를 보고합니다. UTF-8은 가변 길이 문자 인코딩입니다. 단일 유니코드 코드 포인트에 대해 다른 바이트 수를 사용할 수 있으므로 일치하는 대소문자 구분 코드 포인트는 UTF-8에서 다른 바이트 수를 사용할 수 있습니다.
이를 증명하는 예를 살펴보세요:
으아아아다음과 같이 출력됩니다(Go Playground에서 시도해 보세요):
으아아아위 내용은 `strings.EqualFold`가 먼저 길이 비교를 수행하지 않는 이유가 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!