亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

隱藏零值,理解金剛在這里失敗的原因

隱藏零值,理解金剛在這里失敗的原因

隱藏零值,理解金剛在這里失敗的原因我不明白如何正確地保證某件事不是nil在這種情況下:package main type shower interface {   getWater() []shower}type display struct {   SubDisplay *display}func (d display) getWater() []shower {   return []shower{display{}, d.SubDisplay}}func main() {   // SubDisplay will be initialized with null   s := display{}   // water := []shower{nil}   water := s.getWater()   for _, x := range water {     if x == nil {       panic("everything ok, nil found")     }     //first iteration display{} is not nil and will     //therefore work, on the second iteration     //x is nil, and getWater panics.     x.getWater()   }}我找到的唯一方法是檢查這個值是否真的nil是通過反射。這真的是想要的行為嗎?還是我沒有看到代碼中的一些重大錯誤?在這里播放鏈接
查看完整描述

2 回答

?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

讓我們把接口看作一個指針。

假設你有一個指針a這是零,指的是什么都沒有。

var a *int // nil

那么你就有了一個指針b它指向a.

var b **intb = &a // not nil

看看發生了什么?b指向無意義的指針。所以即使是鏈尾的零指針,b指的是什么-不是零。

如果您查看進程的內存,它可能如下所示:

address | name | value1000000 | a    | 02000000 | b    | 1000000

看見?a指向地址0(這意味著nil),以及b的地址a (1000000).

同樣的情況也適用于接口(只是它們看起來有點不同。)在記憶中).

就像指針一樣,指向零指針的接口本身不會是零。.

給你自己看看這是如何與指針一起工作的它是如何與接口一起工作的.


查看完整回答
反對 回復 2019-07-12
  • 2 回答
  • 0 關注
  • 467 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號