jeudi 10 mars 2016

how to judge zero value of golang reflect

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())
        }
    }
}

this program output is :

···

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 ···

what‘s the matter? why if v == nil is false?





Aucun commentaire:

Enregistrer un commentaire