我有以下結(jié)構(gòu):type Foo struct { Bar *FooBar Baz *FooBaz}type FooBar struct { Name string}type FooBaz struct { Name string}未設(shè)置時(shí),如何在沒(méi)有得到nil指針引用的情況下訪問(wèn)結(jié)構(gòu)中的Bazand Bar?我想要類(lèi)似下面的內(nèi)容,但是我不斷收到nil指針解除引用錯(cuò)誤。if Foo.Bar == nil { throw error}我為此而苦苦掙扎!
2 回答

婷婷同學(xué)_
TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
您應(yīng)該可以將其與nil進(jìn)行比較,這是一個(gè)有效的示例:
check := func(f Foo) {
if f.Bar == nil {
panic("oops!")
}
fmt.Println("OK")
}
foo1 := Foo{Bar: &FooBar{"Alpha"}}
check(foo1) // OK
foo2 := Foo{}
check(foo2) // panic: oops!
請(qǐng)注意,如果您要修改“ check”函數(shù)以接受a,*Foo并且使用nil指針調(diào)用該函數(shù),則該函數(shù)本身將因“ nil指針取消引用運(yùn)行時(shí)錯(cuò)誤”而感到恐慌。這可能就是您的示例當(dāng)前正在發(fā)生的情況。
- 2 回答
- 0 關(guān)注
- 275 瀏覽
添加回答
舉報(bào)
0/150
提交
取消