我主要是一名PHP开发人员,最近我开始研究Go.在PHP中,我可以这样做:
<?php
class TestClass {
public function testMethod() {
echo "Hello!\n";
}
}
$obj = new TestClass();
$method_name = "testMethod";
$obj->{$method_name}();
?>
Run Code Online (Sandbox Code Playgroud)
输出是:Hello!.
我知道以下不是一个完美的比较,因为Go没有类,但我想知道我是否可以在Go中使用模块的导出属性做类似的事情.例如这样的事情(我明白这是无效的Go代码):
package main
import "fmt"
func main() {
name := "Println"
fmt[name]("Hello!")
}
Run Code Online (Sandbox Code Playgroud)
无论如何这可能吗?如何才能完成类似的事情呢?谢谢.
编辑:将"模块"更改为"包",因为这是我在Go中所指的正确名称
我猜你在寻找"反思".
package main
import (
"fmt"
"reflect"
)
type sayer struct {
said int
}
func (s *sayer) SayHello() {
fmt.Println("Hello")
}
func main() {
s := &sayer{}
cmd := "SayHello"
reflect.ValueOf(s).MethodByName(cmd).Call(nil)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |