golang 類型斷言取不到地址的問題

func main() {
    var a Integer = 1
    var b Integer = 1
    sum := a.Add(b)
    fmt.Println(sum)

    var i interface{} = a
    sum = i.(Integer).Add(b) // 報錯
    fmt.Println(sum)
}

type Integer int

func (a *Integer) Add(b Integer) Integer {
    return  *a + b
}

報錯信息如下:
test\testVar.go:16:19: cannot call pointer method on i.(Integer)
test\testVar.go:16:19: cannot take the address of i.(Integer)

出現(xiàn)這種情況是因為Add方法需要一個Integer指針類型的接收器,而我們傳過去的i.(Integer)是個值,且這個值也沒有賦給任何變量,所以符號“&”是獲取不到地址的。

錯誤示例

正確的方式是將i.(Integer)賦值給一個變量,或者把方法接收器改成普通類型。

    var i interface{} = a
    c := i.(Integer)
    sum = c.Add(b)
    fmt.Println(sum)

or

func (a Integer) Add(b Integer) Integer {
    return  a + b
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,259評論 0 38
  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,605評論 0 6
  • 生命中任何一天的結(jié)束,便永不重來。 from 《誘僧》 清晨,還沒有迎接這一天的第一縷陽光,空氣冰涼的像是處于空調(diào)...
    林長夏閱讀 341評論 0 2
  • 今天本來還以為是電磁學(xué)魔盒的第一節(jié)課呢?可是居然是前兩個魔盒的總復(fù)習(xí),同學(xué)們兩個魔盒都帶了,而我呢一個魔...
    45cbff51831c閱讀 389評論 2 1
  • 我夢到四個人在一張方桌上吃飯,田園風(fēng)的藍(lán)色格子桌布,微弱的光打在我和她臉上,對面的小女孩背光抬頭,用帶著水汽一般的...
    單喆閱讀 178評論 0 0

友情鏈接更多精彩內(nèi)容