像這樣,如果msg指向null值,如何在干凈的代碼中處理它
。func test(a SomeType) {
switch msg := a. (type) {
case *type1:
dosomething1(a)
case *type2:
dosomething2(a)
case *type3:
dosomething3(a)
default:
do()
}
主函式可能是這樣的
func main(){
var b_ptr *stTest
aa := interface{}(b)
測驗(aa)
}
type test struct {
c int
d string string
}
b_ptr是一個指標,但是它指向nil,我想在測驗函式中判斷它。 如果我在測驗函式中使用b_ptr,例如:列印a.c或a.d,它將崩潰。
我是這樣做的:做if(),到處使用a,但這太愚蠢了。
func test(a SomeType) {
switch msg := a. (type) {
case *type1:
if msg == nil {
return
}
dosomething1(a)
case *type2:
if msg == nil {
return
}
dosomething2(a)
case *type3:
if msg == nil {
return
}
dosomething3(a)
default:
do()
}
uj5u.com熱心網友回復:
一般來說,這應該被認為是呼叫者的問題,因此應該由呼叫者來處理其后果。除非是有意/預期的,否則傳遞持有 "nil "值的非 "nil "介面是不好的做法。
如果你不能用nil-pointer來避免非nil介面,那么你可以使用reflect來檢查底層值是否為nil。
func test(a SomeType) {
if rv := reflect.ValueOf(a); !rv.IsValid() || rv.IsNil() {
回傳。
}
switch msg := a. (type) {
case *type1:
dosomething1(a)
case *type2:
dosomething2(a)
case *type3:
dosomething3(a)
default:
do()
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/313778.html
標籤:
