问题描述
问题出现的环境背景及自己尝试过哪些方法
Val
是TreeNode
结构体的一个成员变量stack.Peek()
返回值是(bool, interface{})
相关代码
_, _top := stack.Peek()
// 如果用这两行代码就会报错
// _top = _top.(*TreeNode)
// res = append(res, _top.Val)
// 以下一行代码没有报错
res = append(res, _top.(*TreeNode).Val)
// 以下两行代码也没有报错
_top2 := _top.(*TreeNode)
res = append(res, _top2.Val)
你期待的结果是什么?实际看到的错误信息又是什么?
为什么注释掉的两行代码,我先执行了类型转换,然后去取Val的时候会报错呢?报错信息是
type interface {} is interface with no methods
类型错了,
_, _top := stack.Peek() 出来的_top 是interface{} 类型的,没问题
_top = _top.(TreeNode) 语法上来说没有问题, 但是记住_top是inteface{}类型, _top.(TreeNode)
等于没做.
所以到下面一行
res = append(res, _top.Val)
_top是一个interface{}, 怎么会有Val成员变量
把那两行代码改成
_tmp := _top.(*TreeNode)
res = append(res, _tmp.Val)
那就ok了