2017-12-27 36 views
-6

나는 패키지 수준에서 포인터 변수를 사용왜 포인터 변수로의 역 마샬링이 불가능합니까?

var config *configuration 

하지만 시도는이 오류에서 변수 결과에 비 정렬 화하기 : json: Unmarshal(nil *main.configuration)합니다. 그러나 포인터 변수에 대한 포인터로 언 마샬링하면 성공합니다. 이것에 대한 이유는 무엇입니까?

+4

초기화되지 않았기 때문에 문서에서 지정된대로 Unmarshal에 대한 잘못된 인수 인'nil'이 필요합니다. 그러나 nil 포인터에 대한 포인터는 그 자체가 nil이 아니기 때문에 작동합니다. – mkopriva

+1

.. 설명 : https://play.golang.org/p/y3h_dD9bePU. 그리고 첫 번째 단락 [here] (https://golang.org/pkg/encoding/json/#Unmarshal)은 v가 nil이면 오류가 반환됨을 나타냅니다. – mkopriva

답변

3

Why is unmarshaling into a pointer variable not possible?

가능합니다. 사실 그것은 필수입니다. 비 포인터로 비 정렬화할 수 없습니다.

json: Unmarshal(nil *main.configuration) 

이 오류는 포인터에 당신이 할 수있는 비 정렬 화되지 말을하지, ​​그것은 당신이 전무 포인터에 비 정렬 화 수 없다는 것. 포인터는 유효한 (아마도 제로 값) 변수를 가리켜 야합니다.

config := new(configuration) 

또는

config := &configuration{} 

으로

var config *configuration 

를 교체하고 그냥 잘 작동합니다.