猿问

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

我主要是一名 PHP 开发人员,最近我开始研究 Go。在 PHP 中,我可以这样做:


<?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!")

}

这无论如何可能吗?如何完成类似的事情?谢谢你。


繁星淼淼
浏览 240回答 2
2回答

跃然一笑

我猜你正在寻找“反射”。package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "reflect")type sayer struct {&nbsp; &nbsp; said int}func (s *sayer) SayHello() {&nbsp; &nbsp; fmt.Println("Hello")}func main() {&nbsp; &nbsp; s := &sayer{}&nbsp; &nbsp; cmd := "SayHello"&nbsp; &nbsp; reflect.ValueOf(s).MethodByName(cmd).Call(nil)}
随时随地看视频慕课网APP

相关分类

Go
我要回答