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

获取方法参数名称

邓德惠
2023-03-14
问题内容

给定以下Go方法:

func (t *T) TMethod(data *testData) (interface{}, *error) {
    ...
}

我想反映参数的名称(data在这里)。

我尝试了以下操作,但是它返回了结构名称(testData在这里):

reflect.ValueOf(T).MethodByName("TMethod").Type().In(0).Elem().Name()

如何获得参数名称?


问题答案:

无法获取方法或函数的参数名称。

这样做的原因是因为名称对于调用方法或函数的人并不是很重要。重要的是参数的类型及其顺序。

甲功能类型表示集合的具有相同参数和结果类型的所有功能。无论参数名称如何,具有相同参数和结果类型的2个函数的类型均相同。以下代码显示true

func f1(a int) {}
func f2(b int) {}

fmt.Println(reflect.TypeOf(f1) == reflect.TypeOf(f2))

甚至可以创建一个甚至不给参数命名的函数或方法(在参数或结果列表中,名称必须全部存在或不存在)。这是有效的代码:

func NamelessParams(int, string) {
    fmt.Println("NamelessParams called")
}

如果要创建某种框架,在其中调用将值传递给“命名”参数的函数(例如,将传入的API参数映射到Go函数/方法参数),则可以使用a,struct因为使用该reflect包可以获取命名字段(例如Value.FieldByName()Type.FieldByName()),也可以使用map

这是有关golang-nuts邮件列表的相关讨论。



 类似资料:
  • 问题内容: 在 Java 6中 ,假设我具有以下方法签名: 我想知道在运行时传递给任何其他参数的值,这里重要的一点是我想通过参数名称获取该值。 我知道如何使用或获取参数类型的列表。 理想情况下,我想获取参数 名称 而不是类型的列表。有办法吗? 问题答案: 如果您告诉编译器将其包括在内,则可以使用参数名称(使用调试信息进行编译)。Spring 可以帮助您获取名称。该默认实现使用ASM 这样做。 与您

  • 问题内容: 鉴于函数: 如何提取参数的数量和名称。即,鉴于我有提及func,因此我希望返回。 为此的使用场景是,我有一个装饰器,并且希望以与实际函数作为键一样的顺序使用方法参数。即,我打电话时装饰器的外观如何? 问题答案: 看一下模块-这将为你检查各种代码对象属性。 其他结果是 args和* kwargs变量的名称,以及提供的默认值。即。 请注意,在某些Python实现中,某些可调用对象可能不是自

  • 是否可以根据SpringAOP中的参数名称获取方法参数值。 这种方法将获得参数名,而不是值。 将返回值而不是名称 那么是否可以根据参数名获取值?

  • 我使用的是Spring4.3。是否可能获得传递给它的方法参数名和值?我相信这可以做到使用AOP(之前的建议),如果可能的话,你可以给我一个源代码。

  • 问题内容: 我有一个很好的功能,可以以给定类型打印有关给定方法的一些信息,这是一个goplay 除了我找不到找到方法参数名称的方法以外,我需要做的所有事情吗? 问题答案: 局部变量的名称(包括函数参数)仅适用于程序员。编译器在生成代码时将其丢弃。无法检索参数名称,因为它们在编译后的代码中不可用。

  • 在我的项目中使用JavaSelenium和Page Object,想要创建一个自定义方法,将两个字符串作为参数,组合它们并调用右webelement来执行一些操作。 下面的例子我的页面对象 } 例如,调用该方法: 调用此方法应执行click on question1Yes元素。