gpt4 book ai didi

go - 反射(reflect) (MethodByName) 无效

转载 作者:IT王子 更新时间:2023-10-29 01:54:11 27 4
gpt4 key购买 nike

反射问题,使用 MethodByName

代码:

package main

import (
"reflect"
"fmt"
)

type test struct {}

var serviceType = map[string]reflect.Value{
"test": reflect.ValueOf(test{}),
}

func (t *test) prnt() {
fmt.Println("test ok")
}

func callFunc(strct string, fName string) {

s := serviceType[strct].MethodByName(fName)
if !s.IsValid(){
fmt.Println("not correct")
return
}

s.Call(make([]reflect.Value,0))
}

func main() {
callFunc("test", "prnt")
}

输出:

not correct

Playground : https://play.golang.org/p/ZLEQBGYoUOB

你能帮忙看看我做错了什么吗?

最佳答案

有两点需要更正。

  1. MethodByName() 仅返回导出的方法。所以你必须重命名prnt tp Prnt
  2. 需要将结构test 的指针传递给reflect.ValueOf() 方法。

这是修改后的工作代码 https://play.golang.org/p/4MK2kqOz6e2

关于go - 反射(reflect) (MethodByName) 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48135649/

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