我主要是一名PHP开发人员,最近我开始关注Go。在PHP中,我可以做这样的事情:是否可以在Go中动态引用包属性?
<?php
class TestClass {
public function testMethod() {
echo "Hello!\n";
}
}
$obj = new TestClass();
$method_name = "testMethod";
$obj->{$method_name}();
?>
输出是:Hello!
。
我知道以下不是完美的比较,因为Go没有类,但是我想知道是否可以在Go中使用模块的导出属性做类似的事情。例如这样的事情(我知道这是无效的Go代码):
package main
import "fmt"
func main() {
name := "Println"
fmt[name]("Hello!")
}
这是否有可能?如何能够完成类似的事情?谢谢。
编辑:改变“模块”,以“包”,因为这是正确的名称是什么,我指的是在围棋
我想我说错了“module”。在Go中,我想我会指的是软件包。 “属性”我只是指包所公开的内容。您的解决方案有效,但是您是否知道有任何方法可以在不创建地图的情况下执行此操作 – 6124j50n 2013-03-08 07:11:02
您的答案似乎是唯一的解决方案,找到后:https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/JWquU5kRjIA – 6124j50n 2013-03-08 07:32:18
模块/包的Go wrt属性有一个区别。 Go包不是任何Go类型的实例。这只是一个名称范围的概念。 IOW中,没有Go变量可以容纳一个包(实例/参考/ ...)以供选择器操作数'.'使用。在源代码中它看起来像那样(例如'fmt.Printf'),但这只是编译时(名称)解析机制,在运行时没有类比。 – zzzz 2013-03-08 08:30:46