在 Golang中使用反射来获取error
类型的名称或包路径会导致程序崩溃(带有panic: runtime error: invalid memory address or nil pointer dereference
)。
这种行为的原因是什么?(对其他内置类型执行相同的操作会返回类型名称和包路径的空字符串。)
我对语言的设计很感兴趣——我不明白为什么它对于error
类型的行为与其他内置类型不同是可取的。
例如:
package main
import (
"fmt"
"reflect"
)
func main() {
var str string
strType := reflect.TypeOf(str)
fmt.Println(strType.Name()) // OK
fmt.Println(strType.PkgPath()) // OK
var err error
errType := reflect.TypeOf(err)
fmt.Println(errType.Name()) // panics
fmt.Println(errType.PkgPath()) // also panics
}
去游乐场: https: //play.golang.org/p/JBMhMkjGPEV