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 중국어 웹사이트의 기타 관련 기사를 참조하세요!