참조 및 포인터로 역마샬링
JSON 데이터를 Go 구조체로 역직렬화하는 과정에서 json.Unmarshal 함수가 중요한 역할을 합니다. 그러나 사용자가 참조 및 포인터로 역마샬링을 시도할 때 불일치가 발생할 수 있습니다.
다음 코드 조각을 고려하세요.
// Unmarshaling into a reference variable var animals Animal err := json.Unmarshal(jsonBlob, &animals)
이 코드는 JSON 데이터를 동물 참조 변수로 성공적으로 역마샬링합니다.
그러나 포인터 변수로 역마샬링을 시도하면 다른 결과가 발생합니다.
// Unmarshaling into a pointer variable var animals *Animal err := json.Unmarshal(jsonBlob, animals)
이 경우 Unmarshal은 다음과 같은 모호한 오류와 함께 실패합니다. "json: Unmarshal(nil *main.Animal )". 이 오류는 동물이 초기화되지 않은 포인터이기 때문에 발생합니다.
Unmarshal에 대한 설명서에는 "포인터가 nil인 경우 Unmarshal은 포인터가 가리키는 새 값을 할당합니다."라고 명시되어 있습니다. 그러나 이 동작은 오류 메시지에서 알 수 있듯이 초기화되지 않은 포인터의 경우 적용되지 않는 것 같습니다.
이 문제를 해결하려면 포인터 변수로 동물을 역마샬링하기 전에 포인터 변수를 초기화하는 것이 좋습니다.
animals = &Animal{} err := json.Unmarshal(jsonBlob, animals)
이 수정을 통해 언마샬링 프로세스가 성공해야 합니다.
문서에서 "언마샬링"이라는 용어가 일관되게 사용된다는 점에 유의하세요.
위 내용은 Go에서 초기화되지 않은 포인터로의 역마샬링이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!