为了确定给定类型是否使用反射包实现接口,您需要将reflect.Type传递给reflect.Type.Implements().你怎么得到这些类型之一?
作为一个例子,试图获得未初始化的os.Error(接口)类型的类型并没有工作(它吓坏了你就可以调用类())
var err os.Error
fmt.Printf("%#v\n", reflect.TypeOf(err).Kind())
Run Code Online (Sandbox Code Playgroud)
Eva*_*haw 29
像这样做:
var err *os.Error
t := reflect.TypeOf(err).Elem()
Run Code Online (Sandbox Code Playgroud)
或者在一行中:
t := reflect.TypeOf((*os.Error)(nil)).Elem()
Run Code Online (Sandbox Code Playgroud)
小智 8
即使是Shaws的反应也是正确的,但简短.来自reflect.TypeOf方法文档的更多细节:
// As interface types are only used for static typing, a
// common idiom to find the reflection Type for an interface
// type Foo is to use a *Foo value.
writerType := reflect.TypeOf((*io.Writer)(nil)).Elem()
fileType := reflect.TypeOf((*os.File)(nil))
fmt.Println(fileType.Implements(writerType))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14059 次 |
最近记录: |