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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么用指針?lè)峙浣涌谌缓蠓峙涞刂吩?Golang 中顯示不同的行為

為什么用指針?lè)峙浣涌谌缓蠓峙涞刂吩?Golang 中顯示不同的行為

Go
蝴蝶不菲 2023-05-15 15:08:04
我是戈朗的新手。我從 go 之旅開(kāi)始。這是go playground 鏈接這是代碼:package mainimport "fmt"type I interface {    M()}type T struct {    S string}func (t *T) M() {    fmt.Println(t.S)}func main() {    var i I    var t *T     i = t    i.M()}它很恐慌恐慌:運(yùn)行時(shí)錯(cuò)誤:無(wú)效內(nèi)存地址或零指針取消引用[信號(hào) SIGSEGV:分段違規(guī)代碼=0xffffffff 地址=0x0 pc=0xd3ea6] goroutine 1 [運(yùn)行]:main.(*T).M(0x0, 0x434070) /tmp/ sandbox696069628/main.go:15 +0x26 main.main() /tmp/sandbox696069628/main.go:24 +0x40但是當(dāng)我改變var t *T i = t到var t T i = &t它不再恐慌在這兩種情況下,行為不應(yīng)該相似嗎?如果不是,為什么?
查看完整描述

2 回答

?
ABOUTYOU

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

您正在聲明但未明確定義t在兩種情況下都命名的變量。如果不指定值,則分配變量類(lèi)型的零值

所有指針類(lèi)型的零值,包括*Tnil。結(jié)構(gòu)類(lèi)型的零值是該結(jié)構(gòu)的所有字段都設(shè)置為零值的值。

當(dāng)為變量 [...] 分配存儲(chǔ)并且未提供顯式初始化時(shí),變量或值將被賦予默認(rèn)值。此類(lèi)變量或值的每個(gè)元素都設(shè)置為其類(lèi)型的零值:布爾值為 false,數(shù)字類(lèi)型為 0,字符串為 "",指針、函數(shù)、接口、切片、通道和映射為 nil。此初始化是遞歸完成的,因此,例如,如果未指定值,則結(jié)構(gòu)數(shù)組的每個(gè)元素都將其字段清零。

https://golang.org/ref/spec#The_zero_value

因此,這會(huì)將 nil 存儲(chǔ)在接口值中i

var i interface{ M() }

var t *T 

i = t

// i stores nil

這在接口值中存儲(chǔ)了一個(gè)結(jié)構(gòu)值i:


var i interface{ M() }

var t T 

i = t

// i stores T{S:""}

所以在第一種情況下,(nil).M()被稱(chēng)為(恐慌),在第二種情況下(T{}).M()被稱(chēng)為。


查看完整回答
反對(duì) 回復(fù) 2023-05-15
?
哆啦的時(shí)光機(jī)

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊

你沒(méi)有初始化 T。
這樣做:

var t *T = &T{"Hello World"}


查看完整回答
反對(duì) 回復(fù) 2023-05-15
  • 2 回答
  • 0 關(guān)注
  • 127 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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