JSON 역직렬화 중 인터페이스 변환 실패
JSON에서 복잡한 데이터 구조를 역직렬화하려고 할 때 인터페이스를 적절하게 처리하는 것이 중요합니다. 런타임 오류. 다음 코드를 고려하십시오.
type Data struct { Content string Links []string } func main() { anInterface := interface{}{/* JSON data here */} // Assertion to Data interface AData2 := anInterface.(Data) }
실행 시 프로그램에서 오류가 발생합니다.
panic: interface conversion: interface {} is map[string]interface {}, not main.Data
문제 이해
오류가 발생합니다. 문자열-인터페이스 쌍의 맵을 포함하는 인터페이스를 데이터 구조체에 직접 주장하려는 시도에서 비롯되었습니다. Go는 인터페이스에 Data 값이 포함될 것으로 예상하지만 실제 콘텐츠는 맵입니다.
해결책
이 문제를 해결하려면 인터페이스의 특성을 이해하는 것이 중요합니다. . 인터페이스는 유형이 구현해야 하는 메소드 세트를 정의하는 단순한 계약입니다. 특정 유형에 대한 인터페이스를 어설션하려면 인터페이스가 이전에 해당 유형의 값으로 채워져 있어야 합니다.
이 경우 다음과 같이 변경해야 합니다.
anInterface = Data{Content: "hello world", Links: []string{"link1", "link2", "link3"}}
AData2 = anInterface.(Data)
이렇게 하면 시도하기 전에 인터페이스에 올바른 유형이 포함되어 있는지 확인됩니다. 데이터로 변환합니다.
대체 접근 방식
또 다른 접근 방식은 JSON 데이터를 원하는 데이터 구조로 직접 역마샬링하는 것입니다.
var AData2 Data err := json.Unmarshal([]byte(jsonStr), &AData2) if err != nil { panic(err) }
위 내용은 JSON 역직렬화 중에 '인터페이스 변환: 인터페이스 {}는 main.Data가 아닌 map[string]interface {}입니다.' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!