鍍金池/ 問答/GO/ Go語言報錯

Go語言報錯

問題描述

問題出現(xiàn)的環(huán)境背景及自己嘗試過哪些方法

ValTreeNode結(jié)構(gòu)體的一個成員變量
stack.Peek()返回值是(bool, interface{})

相關(guān)代碼

_, _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)

你期待的結(jié)果是什么?實際看到的錯誤信息又是什么?

為什么注釋掉的兩行代碼,我先執(zhí)行了類型轉(zhuǎn)換,然后去取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了

2018年5月25日 20:11