「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Map パラメータで `reflect.Call` 関数を正しく使用する方法

Map パラメータで `reflect.Call` 関数を正しく使用する方法

2024 年 11 月 8 日に公開
ブラウズ:236

How to Correctly Use the `reflect.Call` Function with a Map Parameter?

reflect パッケージでの .Call 使用法の問題の解決

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