Reflection 使用可嵌入结构的泛型函数

Reflection 使用可嵌入结构的泛型函数,reflection,go,Reflection,Go,我正在尝试编写一个函数,该函数将处理特定类型的对象,并调用作为参数之一传递的特定方法。因为没有继承或泛型,所以我使用嵌入。(我不能使用接口,因为您只能在接口中定义方法,而且我还需要结构字段) 我是围棋新手,所以我肯定做错了什么。以下是我的代码的简化版本: 输出: Animal type: Dog WOOF Animal type: Cat MEOUW 这段代码可以工作,但我基本上需要传递一个对象两次:首先是一个接口来动态调用一个方法,然后是嵌入式(“父”)对象来访问其字段 我宁愿吃像这样

我正在尝试编写一个函数,该函数将处理特定类型的对象,并调用作为参数之一传递的特定方法。因为没有继承或泛型,所以我使用嵌入。(我不能使用接口,因为您只能在接口中定义方法,而且我还需要结构字段)

我是围棋新手,所以我肯定做错了什么。以下是我的代码的简化版本:

输出:

Animal type:  Dog
WOOF
Animal type:  Cat
MEOUW
这段代码可以工作,但我基本上需要传递一个对象两次:首先是一个接口来动态调用一个方法,然后是嵌入式(“父”)对象来访问其字段

我宁愿吃像这样的东西

func CallMethod(animal Animal, methodName string)
但如果将
对象投射到
动物
上,如下所示:

CallMethod(dog.Animal, "SayWoof")
这显然是行不通的,因为在《动物》中并没有定义“SayWoof”方法

所以问题是:有没有一种方法可以一次性将子对象传递给函数并访问其所有反射数据

谢谢


你到底希望一种带有泛型的语言如何解决你的问题?这是一个诚实的问题。对于不同的函数名,您希望调用“SayMeow”和“SayWoof”,没有任何类型不可知的数据结构可以帮助您神奇地调用正确的东西

在Go中处理类泛型函数的常用方法是通过接口。你的例子看起来很抽象,所以很难给出具体的建议。我很难理解你想做什么。你能用一种带有泛型(比如C#)的语言提供一个类似的例子吗?
CallMethod(dog.Animal, "SayWoof")
package main

import "fmt"

type Animal interface {
    Speak()
}

type Dog struct {
}

type Cat struct {
}

func (d *Dog) Speak() {
    fmt.Println("Woof")
}

func (c *Cat) Speak() {
    fmt.Println("Meow")
}

func Speaketh(a Animal) {
    a.Speak()
}

func main() {
    dog := Dog{}
    cat := Cat{}
    Speaketh(&dog)
    Speaketh(&cat)
}