>  기사  >  백엔드 개발  >  Go에서 \"잘못된 작업: 유형 인터페이스 {}가 인덱싱을 지원하지 않습니다\" 오류를 해결하는 방법은 무엇입니까?

Go에서 \"잘못된 작업: 유형 인터페이스 {}가 인덱싱을 지원하지 않습니다\" 오류를 해결하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-27 04:44:30510검색

How to Resolve the

Go의 인터페이스 유형 인덱싱: "잘못된 작업" 오류 해결

Go에서 "잘못된 작업: 유형 인터페이스 { }는 인터페이스 유형(인터페이스{})을 인덱싱하려고 시도할 때 인덱싱을 지원하지 않습니다.'라는 오류가 발생할 수 있습니다. 이 오류는 특정 데이터 유형을 먼저 어설션하지 않고 인터페이스의 필드나 메서드에 액세스하려고 할 때 발생합니다.

문제:

다음 코드 조각을 고려하세요. :

<code class="go">var d interface{}
json.NewDecoder(response.Body).Decode(&d)
test := d["data"].(map[string]interface{})["type"]</code>

d에 저장된 중첩된 JSON 응답의 "type" 필드에 액세스하려고 하면 "잘못된 작업" 오류가 발생할 수 있습니다. 이는 d가 모든 유형에 대해 추상화하고 본질적으로 인덱싱을 지원하지 않는 인터페이스{} 유형이기 때문입니다.

해결책:

이 오류를 해결하려면 다음이 필요합니다. 인터페이스를 인덱싱을 지원하는 알려진 유형으로 변환하기 위해 유형 어설션을 수행합니다. 이 경우 d가 맵일 것으로 예상하므로 다음 코드를 사용할 수 있습니다.

<code class="go">test := d.(map[string]interface{})["data"].(map[string]interface{})["type"]
fmt.Println(test)</code>

먼저 d가 map[string]인터페이스{}라고 주장합니다. 이를 통해 문자열 키로 색인을 생성할 수 있습니다. 그런 다음 "데이터" 필드에 액세스하고 어설션 프로세스를 반복하여 해당 값을 얻습니다.

대체 접근 방식:

또는 d를 map[으로 선언할 수 있습니다. string]interface{}를 직접 사용하여 첫 번째 유형 어설션이 필요하지 않습니다.

<code class="go">var d map[string]interface{}
if err := json.NewDecoder(response.Body).Decode(&d); err != nil {
    panic(err)
}
test := d["data"].(map[string]interface{})["type"]
fmt.Println(test)</code>

이 코드는 이전 접근 방식과 동일한 기능을 유지합니다.

추가 참고:

이 색인 문제가 자주 발생하는 경우 Go에서 동적 개체 작업을 단순화하는 github.com/icza/dyno와 같은 라이브러리 활용을 고려해 보세요.

위 내용은 Go에서 \"잘못된 작업: 유형 인터페이스 {}가 인덱싱을 지원하지 않습니다\" 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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