第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

*(*int)(nil) = 0 在 golang 中是什么意思?

*(*int)(nil) = 0 在 golang 中是什么意思?

Go
素胚勾勒不出你 2022-07-11 16:41:44
*(*int)(nil) = 0我注意到函數(shù)中有一行throw//go:nosplitfunc throw(s string) {    // Everything throw does should be recursively nosplit so it    // can be called even when it's unsafe to grow the stack.    systemstack(func() {        print("fatal error: ", s, "\n")    })    gp := getg()    if gp.m.throwing == 0 {        gp.m.throwing = 1    }    fatalthrow()    *(*int)(nil) = 0 // not reached}是什么*(*int)(nil) = 0意思?既然這條線*(*int)(nil) = 0無法到達(dá),為什么它在這里?有什么特別的用法嗎?
查看完整描述

1 回答

?
楊__羊羊

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個贊

該行:


*(*int)(nil) = 0

嘗試取消引用nil指針并為其分配值,這始終是運(yùn)行時恐慌。代碼永遠(yuǎn)不會到達(dá)這一行,但是如果它無論如何都會到達(dá)(例如,將來發(fā)生錯誤的代碼更改),它會恐慌,因此可以檢測到錯誤并且不會被忽視。


在您的代碼中做類似的事情也是常識,但使用更明顯的“構(gòu)造”,例如panic("unreachable"). 例如:


func sign(a int) string {

    switch {

    case a > 0:

        return "Positive"

    case a < 0:

        return "Negative"

    case a == 0:

        return "Zero"

    default:

        panic("unreachable")

    }

}

請注意,在此示例中,這不僅是為了及早檢測錯誤,也是一項(xiàng)要求,因?yàn)閷τ诰幾g器來說,無法保證會到達(dá) return 語句。您也可以將panic("unreachable")語句移到switch(而不是default分支)之后,這是一個口味問題。


如果您將上述函數(shù)更改為不返回但打印符號,則讓default分支恐慌仍然是一個好習(xí)慣,盡管這不是此變體中的要求:


func printSign(a int) {

    switch {

    case a > 0:

        fmt.Println("Positive")

    case a < 0:

        fmt.Println("Negative")

    case a == 0:

        fmt.Println("Zero")

    default:

        panic("unreachable")

    }

}


查看完整回答
反對 回復(fù) 2022-07-11
  • 1 回答
  • 0 關(guān)注
  • 225 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號