ホームページ  >  記事  >  バックエンド開発  >  リフレクトパッケージの.Call関数にパラメータを正しく渡す方法は?

リフレクトパッケージの.Call関数にパラメータを正しく渡す方法は?

DDD
DDDオリジナル
2024-10-30 18:00:04640ブラウズ

How to Correctly Pass Parameters to .Call Function in the reflect Package?

Reflect パッケージの .Call について

reflect パッケージの .Call 関数を利用する場合、正しく操作する方法を理解することが重要です。 "in" 変数を使用して、適切な関数パラメーターを渡します。

次のシナリオを考えます:

<code class="go">params := "some map[string][]string"
in := make([]reflect.Value, 0)
return_values := reflect.ValueOf(&controller_ref).MethodByName(action_name).Call(in)</code>

呼び出される関数は次のように定義されます:

<code class="go">func (c *Controller) Root(params map[string][]string) map[string] string{}</code>

解決するには「reflect: Call の入力引数が少なすぎます」というエラーが表示される場合は、.Call の構文を理解することが重要です。ドキュメントに記載されているように、in スライス内の各要素は関数の引数に対応します。したがって、関数に 1 つのパラメータが必要な場合は、適切な型の 1 つの Reflect.Value を含める必要があります。

この例では、正しいアプローチは次のとおりです。

<code class="go">m := map[string][]string{"foo": []string{"bar"}}

in := []reflect.Value{reflect.ValueOf(m)}

myMethod.Call(in)</code>

この行はマップを取得し、reflect.Value に変換し、それを唯一の引数として関数呼び出しに渡します。

以上がリフレクトパッケージの.Call関数にパラメータを正しく渡す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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