我需要知道使用反射的類型名稱及其路徑。類型Type
具有Name()和PkgPath()方法,但如果類型是接口,則它們都會返回空值。如何使用反射提取接口類型名稱和包?
但是,如果我反映一個函數並提取其參數的類型信息,我會得到正確的類型信息。我應該認爲這是前一種情況下的錯誤嗎?不管TypeOf是否返回相同的類型信息(例如,類型函數參數或值的類型)?
我知道類型斷言,但我並不總是有價值做斷言,所以我需要使用reflect.Type信息。
package main
import (
"fmt"
"reflect"
"golang.org/x/net/context"
)
func main() {
c := reflect.TypeOf(withValue(""))
fn := func(context.Context){}
fc := reflect.TypeOf(fn).In(0)
fmt.Println(isContext(c), isContext(fc), c, fc)
}
func isContext(r reflect.Type) bool {
return r.PkgPath() == "golang.org/x/net/context" && r.Name() == "Context"
}
func withValue(v interface{}) context.Context {
return context.WithValue(context.TODO(), "mykey", v)
}
打印
false true *context.valueCtx context.Context
對於我的同伴回答者,可運行的操場鏈接:https://play.golang.org/p/fnjfVl1anv – HectorJ