关于Go语言报错的问题?

问题出现的环境背景及自己尝试过哪些方法

ValTreeNode结构体的一个成员变量
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


慕哥6287543
浏览 201回答 1
1回答

米脂

类型错了,_, _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了
打开App,查看更多内容
随时随地看视频慕课网APP