reflect パッケージ内で .Call 関数を利用する場合、必要なパラメータ形式に従うことが重要です。この記事では、.Call 関数を正しく使用し、目的のメソッドに合わせて in 変数を操作するプロセスについて説明します。
提供されるサンプル コード内:
params := "some map[string][]string" in := make([]reflect.Value,0) return_values := reflect.ValueOf(&controller_ref).MethodByName(action_name).Call(in)
in変数は空のスライスとして初期化されます。呼び出そうとしているメソッドは、map[string][]string 型の単一パラメータを想定しているため、in スライスには、このマップを保持する 1 つの Reflect.Value インスタンスが含まれている必要があります。
この問題を修正するには、正しいアプローチは次のとおりです。マップを作成し、reflect.ValueOf を使用してそれをreflect.Value に変換します。調整されたコードは次のとおりです。
m := map[string][]string{"foo": []string{"bar"}} in := []reflect.Value{reflect.ValueOf(m)} return_values := reflect.ValueOf(&controller_ref).MethodByName(action_name).Call(in)
この変更により、in 変数はマップをターゲット メソッドに正しく渡し、目的の関数呼び出しが確実に成功するようになります。
以上がMap パラメータで `reflect.Call` 関数を正しく使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。