3
package main
import (
"fmt"
"reflect"
)
func main() {
var p1 *string = nil
var v interface{} = p1
val := reflect.Indirect(reflect.ValueOf(v))
if v == nil {
fmt.Printf("NULL")
} else {
if val.CanInterface() {
fmt.Printf("if is %v\n", val.Interface())
}
}
}
這個程序的輸出是:如何判斷golang零值反映
···
panic: reflect: call of reflect.Value.CanInterface on zero Value
goroutine 1 [running]:
panic(0xd65a0, 0xc82005e000)
/usr/local/go/src/runtime/panic.go:464 +0x3e6
reflect.Value.CanInterface(0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/reflect/value.go:897 +0x62
···
出了什麼事,如果爲什麼v == nil
是false
?
你的意思是變種V接口{} = 0;在V不是O,只有指針,以鄰? –
@upduan它是'O',在這種情況下'O'是'* string',這就是爲什麼'訴(*字符串)== nil'工作。 – OneOfOne