我想创建一些通用函数来处理大量不同的对象类型,其中一些类型嵌入了我创建的方便的子类型调用BaseObject。在GoLang中访问嵌入的方法
我似乎无法弄清楚如何测试'Value interface {}'是否包含BaseObject,或者如何调用其中一个方法,例如的ToString()...这应该返回[TestObject中]不是[BaseObject]
package Test
import(
"fmt"
"reflect"
)
func main() {
Value:=TestObject{}
TestFunction(Value)
}
//Generic function
func TestFunction(Value interface{}){
// Does value contain BaseObject? reflect.TypeOf(Value).Containes...Implements??
//Convert to BaseObject? BO:=Value.(BaseObject)
// If it does, call BO.ToString()
//fmt.println(BO.ToString())
}
//Base Object
type BaseObject struct {
}
func (this *HCObject) ToString() string {
return "[BaseObject]"
}
//Test Object
type TestObject struct{
BaseObject
}
func (this *TestObject) ToString() string {
return "[TestObject]"
}
另请参阅http://stackoverflow.com/a/23148998/6309关于'interface {}的更多信息 – VonC 2014-09-02 14:26:16
如果您尝试在Go中执行“经典”OOP,您会感到失望。你确定你找不到类似Go的解决方案吗? – Volker 2014-09-02 14:29:12
在Go中,您将会更好*而不是*尝试编写类风格的面向对象代码。 Go没有类,子类,继承等等。 – JimB 2014-09-02 14:29:19