ホームページ >バックエンド開発 >Golang >実行時に名前 (文字列) を使用して Go 関数を呼び出すにはどうすればよいですか?

実行時に名前 (文字列) を使用して Go 関数を呼び出すにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-04 18:45:14240ブラウズ

How Can I Call a Go Function Using Its Name (String) at Runtime?

Go の文字列からの関数へのポインター

メタプログラミング、つまり実行時にコード自体を操作する機能は、プログラミングにおける強力なテクニックです。 Go では、文字列として提供される名前に基づいて関数へのポインターにアクセスする必要があるという側面が考えられます。

ソリューション

とは異なります。動的言語、Go 関数は第一級の値とみなされます。これは、関数を他の関数に引数として渡すことができ、複雑なメタプログラミング手法の必要性を排除できることを意味します。

これを示すために、次のコード スニペットを考えてみましょう。

package main

import "fmt"

func someFunction1(a, b int) int {
    return a + b
}

func someFunction2(a, b int) int {
    return a - b
}

func someOtherFunction(a, b int, f func(int, int) int) int {
    return f(a, b)
}

func main() {
    fmt.Println(someOtherFunction(111, 12, someFunction1))
    fmt.Println(someOtherFunction(111, 12, someFunction2))
}

実行

このコードを実行すると、次のものが生成されます。出力:

123
99

これは、関数をその名前に基づいて引数として someOtherFunction に渡す方法を示します。

カスタム関数の選択

If関数の選択は、実行時にのみ判明する値に依存します。マップを使用して、関数名を対応する関数に関連付けることができます。ポインタ:

m := map[string]func(int, int) int{
    "someFunction1": someFunction1,
    "someFunction2": someFunction2,
}

...

z := someOtherFunction(x, y, m[key])

以上が実行時に名前 (文字列) を使用して Go 関数を呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。