Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reflection 动态获取golang接口名_Reflection_Go_Interface - Fatal编程技术网

Reflection 动态获取golang接口名

Reflection 动态获取golang接口名,reflection,go,interface,Reflection,Go,Interface,我有一个界面: type Printer interface { Print(s string) } 和一个func: func fxyz(name string) { .... } 我想用“Printer”调用fxyz,但我不想硬编码字符串 如何使用反射或其他方法获取接口名称 如果要获取接口的名称,可以使用reflect: name := reflect.TypeOf((*Printer)(nil)).Elem().Name() fxyz(name) 操场: 请注意,您不

我有一个界面:

type Printer interface {
    Print(s string)
}
和一个func:

func fxyz(name string) {
    ....
}
我想用“Printer”调用fxyz,但我不想硬编码字符串


如何使用反射或其他方法获取接口名称

如果要获取接口的名称,可以使用
reflect

name := reflect.TypeOf((*Printer)(nil)).Elem().Name()
fxyz(name)
操场:


请注意,您不能只取
reflect.TypeOf(Printer(nil)).Name()
,因为
TypeOf
将返回
nil

您能澄清一下您到底想要什么吗?如果我理解得很好,OP希望实现Print调用fxyz,并将接口的名称作为名称参数传递。。。好吧,即使如此,这似乎也不太清楚。。。简单地使用“打印机”字符串常量,使用反射将是一个不可接受的折衷,因为打印始终是打印机接口的一个实现……我认为icza更多地询问了“为什么”——也就是说,人们经常问如何解决特定问题,而不是这是否是正确的方法。像这样在Go中动态调用接口很可能是错误的方法。