go 反射执行切片中结构体的方法
时间: 2023-10-07 12:10:27 浏览: 57
可以使用反射获取切片中结构体的方法,并通过反射调用方法。
示例代码如下:
```go
package main
import (
"fmt"
"reflect"
)
type Person struct {
Name string
Age int
}
func (p Person) SayHello() {
fmt.Println("Hello, my name is", p.Name)
}
func main() {
people := []Person{
{Name: "Alice", Age: 25},
{Name: "Bob", Age: 30},
}
for _, person := range people {
v := reflect.ValueOf(person)
method := v.MethodByName("SayHello")
if method.IsValid() {
method.Call(nil)
}
}
}
```
在上面的代码中,我们定义了一个 `Person` 结构体和一个 `SayHello` 方法。然后,我们创建了一个 `people` 切片,并通过反射获取每个结构体的方法,最后调用方法。
需要注意的是,我们使用 `reflect.ValueOf` 获取结构体的值,然后使用 `MethodByName` 获取方法的值。如果方法存在,我们可以通过 `Call` 方法调用它。在这个例子中,我们没有传递任何参数,因为 `SayHello` 方法没有参数。如果方法有参数,我们需要通过 `reflect.ValueOf` 获取参数的值,并将它们传递给 `Call` 方法。