2

私は主に 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!")
}

これはとにかく可能ですか?どうすれば同様のことを達成できますか? ありがとうございました。

編集:「モジュール」を「パッケージ」に変更しました。これは、Go で参照していたものの適切な名前であるためです。

4

2 に答える 2

5

「反省」を求めているのでしょう。

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)
}
于 2013-03-08T12:34:17.013 に答える
3

「モジュール プロパティ」が何を意味するのかわかりません (Go 仕様ではそのようなことは知られていません)。推測のみ:

package main

import "fmt"

func main() {
        m := map[string]func(va ...interface{}) (int, error){"Println": fmt.Println}
        m["Println"]("Hello, playground")
}

こちらも)


出力

Hello, playground
于 2013-03-08T07:06:51.300 に答える