我在这里发现了一个函数调用MethodByName() http://golang.org/pkg/reflect/#Value.MethodByName,但它并不是我想要的!(可能是因为我不知道如何使用它……我找不到任何例子).我想要的是:

type MyStruct struct {
//some feilds here
} 
func (p *MyStruct) MyMethod { 
    println("My statement."); 
} 

CallFunc("MyStruct", "MyMethod"); 
//print out "My statement." 

所以我想,首先我需要StructByName(),然后用它来做MethodByName(),对吗!?

推荐答案

要对对象调用方法,首先使用reflect.ValueOf.然后按名称查找方法,最后调用找到的方法.例如:

package main

import "fmt"
import "reflect"

type T struct {}

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

func main() {
    var t T
    reflect.ValueOf(&t).MethodByName("Foo").Call([]reflect.Value{})
}

Go相关问答推荐

map 中的多个函数类型,Golang

JetBrains Goland,禁用突出显示测试文件

将DATE类型的SQL字段扫描到GO struct 字段

如何在Golang中覆盖404

Go 中带有回调的 MiniDumpWriteDump

Go 中将 int 切片转换为自定义 int 切片指针类型的函数

错误!在为 age-viewer-go 运行 wails dev 或 wails build 命令时

如何从 Asterisk Manager Interface Event 获取活动呼叫数

assert: mock: I don't know what to return because the method call was unexpected 在 Go 中编写单元测试时出错

Go gmail api 快速入门导致本地主机拒绝连接 ERR_CONNECTION_REFUSED

go:embed 文件扩展名模式

如何使用struct的方法清除除某些字段之外的struct值

我如何解码 aes-256-cfb

没有堆栈跟踪的 go 程序崩溃是什么意思?

panic :拨号 tcp:在 172.22.64.1:53 上查找 bookstoreDB:没有这样的主机

如何通过组合来自不同包的接口来创建接口?

Golang 有类似 C++ 的 decltype 的东西吗?

为什么 go-cmp Equal() 说 struct 不是完全相等的,即使所有字段都非常相等?

在 VSCode 中使用命令行参数调试 Go 测试

如何访问Go 1.18泛型 struct (structs)中的共享字段