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

阅读 1.8k
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了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题