gpt4 book ai didi

go - 如何调用 golang struct 字段的函数?

转载 作者:数据小太阳 更新时间:2023-10-29 03:22:40 25 4
gpt4 key购买 nike

package main

import "fmt"
import "reflect"

type T struct{}

func (t *T) Foo() {
fmt.Println("foo")
}

type A struct {
Ts T
}

func main() {
var t T
var a A = A{Ts: t}
val := reflect.ValueOf(&a).Elem()
for i := 0; i < val.NumField(); i++ {
vf := val.Field(i).Addr()
fmt.Println(vf.Type())
fmt.Println(vf.Kind())
reflect.ValueOf(vf).MethodByName("Foo").Call([]reflect.Value{})
}

}

$ go run reflect_call_1.go
*main.T ptr panic: reflect: call of reflect.Value.Call on zero Value

goroutine 1 [running]: reflect.flag.mustBe(0x0, 0x13)
/usr/local/go/src/reflect/value.go:201 +0xae reflect.Value.Call(0x0, 0x0, 0x0, 0xc420049f00, 0x0, 0x0, 0x0, 0x0, 0x40457c)
/usr/local/go/src/reflect/value.go:300 +0x38

最佳答案

vf 已经是 reflect.Value 类型,您不必将其传递给另一个 reflect.ValueOf()打电话。

只需调用 MethodByName()vf 上:

vf.MethodByName("Foo").Call([]reflect.Value{})

输出将是(在 Go Playground 上尝试):

*main.T
ptr
foo

关于go - 如何调用 golang struct 字段的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50832854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com