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 変数はマップをターゲット メソッドに正しく渡し、目的の関数呼び出しが確実に成功するようになります。 .
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3