我要使用未导出的自定义类型,并定义一个接口以使用它。自定义类型将实现该接口,并且除从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()函数来创建“值”类型的对象。
尝试解组使用New()创建的对象时,出现错误:
Failed to unmarshal value json: cannot unmarshal object into Go value of type main.Value
可以通过使New()返回“值”而不是“值”来解决此问题,但是在尝试解组像这样的对象时仍然会出现问题:
Storage struct {
Val Value `json:"val"`
}
有什么建议吗?在这种情况下,实施Unmarshaler无济于事。我使用以下示例创建一个转到代码段:https://play.golang.org/p/IEalgBCsTVR
答案 0 :(得分:0)
您需要为json.Unmarshal()
提供指向具体类型的指针。因此,更改(从链接的游乐场):
unm := New()
到
unm := New().(value)