未导出类型的 JSON 编组

问题描述 投票:0回答:1

我想使用未导出的自定义类型并定义一个接口来使用它。自定义类型将实现接口,除了从 JSON 解组之外,一切正常。

我创建了一个示例来更好地解释它:

type (
    Value interface {
        Set(k, v string)
    }

    value map[string]string
)

func New() Value {
    return value{}
}

func (val value) Set(k, v string) {
    val[k] = v
}

此方法不会提供对地图的直接访问,并强制使用 New() 函数来创建“Value”类型的对象。

当尝试在使用 New() 创建的对象中解组时,我收到错误:

Failed to unmarshal value json: cannot unmarshal object into Go value of type main.Value

可以通过让 New() 返回“value”而不是“Value”来解决这个问题,但在尝试解组对象时仍然会出现问题:

Storage struct {
        Val Value `json:"val"`
}

有什么建议吗?在这种情况下,实施 Unmarshaler 没有帮助。我用这个例子创建了一个 go 代码片段:https://play.golang.org/p/IEalgBCsTVR

json go marshalling unmarshalling
1个回答
0
投票

您需要给

json.Unmarshal()
一个指向具体类型的指针。所以改变(从你链接的游乐场):

unm := New()

unm := New().(value)
© www.soinside.com 2019 - 2024. All rights reserved.