【问题标题】:Why is unmarshaling into a pointer variable not possible?为什么无法解组为指针变量?
【发布时间】:2017-12-27 17:52:19
【问题描述】:

我在包级别使用指针变量:

var config *configuration

但尝试解组到变量中会导致此错误:json: Unmarshal(nil *main.configuration)。然而,解组为指向指针变量的指针是成功的。这是什么原因?

【问题讨论】:

  • 因为它未初始化,因此 nil,这是文档中指定的 Unmarshal 的无效参数。但是指向 nil 指针的指针本身并不是 nil,这就是它起作用的原因。
  • .. 说明:play.golang.org/p/y3h_dD9bePU。第一段here 声明如果 v 为 nil 则返回错误。

标签: pointers go


【解决方案1】:

为什么无法解组为指针变量?

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

json: Unmarshal(nil *main.configuration)

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

替换

var config *configuration

config := new(configuration)

config := &configuration{}

它应该可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    相关资源
    最近更新 更多