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 サイトの他の関連記事を参照してください。