>백엔드 개발 >Golang >JSON 역직렬화 중에 '인터페이스 변환: 인터페이스 {}는 main.Data가 아닌 map[string]interface {}입니다.' 오류가 발생하는 이유는 무엇입니까?

JSON 역직렬화 중에 '인터페이스 변환: 인터페이스 {}는 main.Data가 아닌 map[string]interface {}입니다.' 오류가 발생하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-14 12:33:021038검색

Why am I getting an

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 값이 포함될 것으로 예상하지만 실제 콘텐츠는 맵입니다.

해결책

이 문제를 해결하려면 인터페이스의 특성을 이해하는 것이 중요합니다. . 인터페이스는 유형이 구현해야 하는 메소드 세트를 정의하는 단순한 계약입니다. 특정 유형에 대한 인터페이스를 어설션하려면 인터페이스가 이전에 해당 유형의 값으로 채워져 있어야 합니다.

이 경우 다음과 같이 변경해야 합니다.

  1. 인터페이스 채우기 Data 값 사용:
anInterface = Data{Content: "hello world", Links: []string{"link1", "link2", "link3"}}
  1. Data에 인터페이스를 지정:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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