func main() {
//testMidAndGroup()
testI()
}
type t1 interface {
Op()
}
type t1i struct {
I int `json:"i"`
}
func (t *t1i) Op() {
fmt.Println("t1i")
}
func testI() {
var t t1 = &t1i{}
b, e := json.Marshal(t)
if e != nil {
fmt.Println(e)
return
}
var t2 t1
e = json.Unmarshal(b, &t2)
if e != nil {
fmt.Println(e)
}
}
如上代码, 会有json: cannot unmarshal object into Go value of type main.t1报错,请问接口如何做反序列化
有疑问加站长微信联系(非本文作者)

要先转换成结构体 t3 := t2.(*t1i)
接口又没有数据,做序列化的意义是什么
t2是nil,当然无法序列化,首先你要有个实体
反序列化必须要基于实体定义, 接口是你反序列化到实体实例之后, 再做转换才行.
完全没用写接口的必要,接口只是一个规范
初始化一下 var t2 t1 = &t1i{}
1楼说的对
你创建的t2是interface类型,这边你可以转换为具体结构体然后做反序列化,了解一下interface具体的一个结构类型你就清楚为啥反序列化失败了