-3

errorGolang でリフレクションを使用して型の名前またはパッケージ パスを取得すると、プログラムがパニックに陥ります ( 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

4

1 に答える 1