>백엔드 개발 >Golang >Go의 문자열 인덱싱이 항상 예상 문자를 반환하지 않는 이유는 무엇입니까?

Go의 문자열 인덱싱이 항상 예상 문자를 반환하지 않는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-14 16:18:14659검색

Why Doesn't String Indexing in Go Always Return the Expected Character?

Golang 문자열의 문자 인덱싱

문자열에서 문자를 검색하려면 인덱싱 작업을 사용합니다. 그러나 인덱싱된 값이 예상 문자와 일치하지 않는 경우가 발생할 수 있습니다. 예를 들어 아래 코드에서는

package main

import "fmt"

func main() {
    fmt.Print("HELLO"[1])
}

문자 "E" 대신 69가 출력됩니다.

Golang 문자열 인코딩 이해

Golang은 문자열 리터럴에 UTF-8 인코딩을 사용합니다. 문자 "E"를 포함한 ASCII 문자는 단일 바이트를 차지합니다. 그러나 더 큰 유니코드 문자는 여러 바이트로 표시될 수 있습니다.

문자 색인화에 룬 사용

문자를 올바르게 색인화하려면 유니코드 코드 포인트를 나타내는 정수인 룬을 사용하십시오. 룬은 UTF-8 문자의 기본 유형입니다. rune() 함수를 사용하여 바이트를 룬으로 변환할 수 있습니다.

바이트를 문자로 변환

바이트를 해당 문자로 변환하려면 다음을 사용할 수 있습니다. string() 함수:

fmt.Println(string("Hello"[1])) // ASCII only

이 접근 방식은 ASCII에 적합합니다.

룬을 문자로 변환

유니코드 문자의 경우 []rune() 슬라이스를 사용하여 룬을 문자로 변환할 수 있습니다:

fmt.Println(string([]rune("Hello, 世界")[1])) // UTF-8

유니코드의 예 문자

다음 예를 고려하십시오.

fmt.Println(string([]rune("Hello, 世界")[8])) // UTF-8

이렇게 하면 한자 "world"에 대한 유니코드 코드 포인트인 "界"가 인쇄됩니다.

추가 자료

  • [Go 프로그래밍 변환에 대한 언어 사양 섹션](https://golang.org/ref/spec#Conversions)
  • [Go 블로그: Go의 문자열, 바이트, 룬 및 문자](https://blog.golang .org/strings-bytes-runes-and-characters-in-go)

위 내용은 Go의 문자열 인덱싱이 항상 예상 문자를 반환하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.