2017-12-27 351 views
-6

我用一个指针变量在封装级:为什么解组指针变量不可能?

var config *configuration 

但试图解组此错误变量的结果:json: Unmarshal(nil *main.configuration)。但是,解组成指针变量的指针是成功的。这是什么原因?

+4

因为它是未初始化的,所以'nil',这是对文档中指定的Unmarshal无效的参数。但是一个指向零指针的指针本身并不是零,这就是为什么这是有效的。 – mkopriva

+1

..来说明:https://play.golang.org/p/y3h_dD9bePU。第一段[here](https://golang.org/pkg/encoding/json/#Unmarshal)指出,如果v为零,则返回错误。 – mkopriva

回答

3

Why is unmarshaling into a pointer variable not possible?

这是可能的。事实上,这是必需的。解组到非指针是不可能的。

json: Unmarshal(nil *main.configuration) 

此错误是不是说你不能解组的指针,它说你不能解组到零指针。指针必须指向一个有效的(可能是零值)变量。

更换

var config *configuration 

随着

config := new(configuration) 

config := &configuration{} 

,它应该只是罚款。

相关问题