一尘不染

如何检查对象是否具有特定方法?

go

在Go中,如何检查对象是否响应方法?

例如,在Objective-C中,可以通过执行以下操作来实现:

if ([obj respondsToSelector:@selector(methodName:)]) { // if method exists
  [obj methodName:42]; // call the method
}

阅读 188

收藏
2020-07-02

共1个答案

一尘不染

一个简单的选择是仅使用您要检查的方法声明一个接口,然后针对您的类型进行类型断言;例如:

 i, ok := myInstance.(InterfaceImplementingThatOneMethodIcareAbout)
 // inline iface delcataration example
 i, ok = myInstance.(interface{F()})

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
2020-07-02