当前位置: 首页 > 面试题库 >

在Go中通过名称调用结构及其方法?

权承
2023-03-14
问题内容

我在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程序: 错误: prog.go:18:无效的操作:v [属性](*顶点类型的索引) 我想要的是使用名称访问Vertex X属性。如果我这样做,它会起作用,但不会。 有人可以告诉我如何进行这项工作吗? 问题答案: 大多数代码都不需要这种动态查找。与直接访问相比,它效率低下(编译器知道Vertex结构中X字段的偏移量,可以将vX编译为单个机器指令,而动态查找则需要

  • 问题内容: 我需要验证结构值是否正确,这意味着我需要单独检查每个字段,这对于少量的小型结构来说很容易,但是我想知道是否有更好的方法。这就是我现在的做法。 这是验证结构中字段值的惯用方式吗?看起来很麻烦。 问题答案: 我认为没有其他方法可以快速完成此操作。但是我找到了一个可以帮助您的go软件包:https : //github.com/go- validator/validator README文件

  • 问题内容: package main 结构中无名字段的目的是什么? 是否可以像使用命名字段一样访问这些字段? 问题答案: 请参阅“ 在Go中嵌入 ”:您在结构中嵌入了一个匿名字段:通常与嵌入式结构一起使用,而不是像这样的基本类型。该类型没有要显示的“提升字段”。 字段或方法在一个结构匿名字段的被称为 促进 如果是一个合法的选择器,它表示字段或方法。 提升的字段的作用类似于结构的普通字段,只是它们不

  • 问题内容: Python:如何在被调用方法中获取调用者的方法名称? 假设我有2种方法: 如果我不想对method1进行任何更改,如何在method2中获取调用者的名称(在本示例中,名称为method1)? 问题答案: inspect.getframeinfo和其他相关功能可以帮助: 该自省旨在帮助调试和开发;建议不要将其用于生产功能。