在Go中,如何检查对象是否响应方法?
例如,在Objective-C中,这可以通过以下方式实现:
if ([obj respondsToSelector:@selector(methodName:)]) { // if method exists
[obj methodName:42]; // call the method
}
Run Code Online (Sandbox Code Playgroud)
eva*_*nal 31
一个简单的选择是使用您要检查的方法声明一个接口,然后针对您的类型执行类型断言;
i, ok := myInstance.(InterfaceImplementingThatOneMethodIcareAbout)
// inline iface delcataration example
i, ok = myInstance.(interface{F()})
Run Code Online (Sandbox Code Playgroud)
reflect
如果您计划对您的类型做任何过于疯狂的事情,您可能想要使用该软件包; http://golang.org/pkg/reflect
st := reflect.TypeOf(myInstance)
m, ok := st.MethodByName("F")
if !ok {
// method doesn't exist
}
// do something like invoke m
Run Code Online (Sandbox Code Playgroud)
Umb*_*ndi 19
如果obj是一个interface{}
你可以使用Go类型断言:
if correctobj, ok := obj.(interface{methodName()}); ok {
correctobj.methodName()
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6493 次 |
最近记录: |