我需要使用反射知道类型名称及其路径。typeType有 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
森栏
慕虎7371278
相关分类