Go语言 未导出类型的JSON封送

xqk2d5yq  于 2023-11-14  发布在  Go
关注(0)|答案(1)|浏览(115)

我想使用一个自定义类型,这是不导出,并定义一个接口来使用它。自定义类型将实现接口和一切工作正常,除了从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
}

字符串
这种方法不会提供对Map的直接访问,并强制使用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

e7arh2l6

e7arh2l61#

你需要给给予json.Unmarshal()一个指向具体类型的指针。所以改变(从你链接的操场):

unm := New()

字符串

unm := New().(value)

相关问题