为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以在 Go 中动态引用包属性?

是否可以在 Go 中动态引用包属性?

Go
繁星淼淼 2021-06-04 09:35:34
我主要是一名 PHP 开发人员,最近我开始研究 Go。在 PHP 中,我可以这样做:<?phpclass TestClass {    public function testMethod() {        echo "Hello!\n";    }}$obj = new TestClass();$method_name = "testMethod";$obj->{$method_name}();?>输出为:Hello!。我知道以下不是一个完美的比较,因为 Go 没有类,但我想知道我是否可以对 Go 中模块的导出属性做类似的事情。例如这样的事情(我知道这不是有效的 Go 代码):package mainimport "fmt"func main() {    name := "Println"    fmt[name]("Hello!")}这无论如何可能吗?如何完成类似的事情?谢谢你。
查看完整描述

2 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

我猜你正在寻找“反射”。


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)

}


查看完整回答
反对 回复 2021-06-07
  • 2 回答
  • 0 关注
  • 239 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信