>백엔드 개발 >Golang >Go에서 초기화되지 않은 포인터로의 역마샬링이 실패하는 이유는 무엇입니까?

Go에서 초기화되지 않은 포인터로의 역마샬링이 실패하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-21 00:50:12919검색

Why Does Unmarshaling into an Uninitialized Pointer Fail in Go?

참조 및 포인터로 역마샬링

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

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