前提
Goについて質問です。
とある自作パッケージAに引数(any)付きのメソッド"hoge"があります。
そのメソッドは別パッケージBから呼んでいます。引数には、ケースに応じて複数種のユーザ定義型(仮に)のいずれかのインスタンス変数をセットしています。引数の型がanyのため、事前の型指定はできません。
実現したいこと
メソッドA内で、呼び元が渡した引数の型(ユーザ定義型)でsliceを作成したいのですが、良い方法はありますでしょうか?
それをメソッドの戻り値にしたいです。
ここに実現したいことを箇条書きで書いてください。
- 引数(任意のユーザ定義型)に応じた型のsliceをメソッド内で作成したい。
(このsliceを戻り値にするので、sliceの型が、[]UserDefinedStruct1 またはinterface{} | []UserDefinedStruct1(→[]anyの変数に []UserDefinedStruct1をappendした場合にデバッグ表示される型))
メソッドの戻り値がanyなので、sliceの型はどちらでも変わらない。
発生している問題・エラーメッセージ
---
該当のソースコード
Goになります。
package(A)
1 2(略) 3func New () { 4 return 5} 6 7func (<レシーバー>) Hoge (argData any) any { 8 9}
package(B)
1 2(略) 3 4func (<レシーバー>) Fuga (argData any) any { 5 6aaa := A.New() 7data := aaa.Hoge(C.UserDefinedStruct1{}) 8 9// dataを使った処理 10... 11 12}
package(C)
1 2// 独自のstructを定義 3type UserDefinedStruct1 struct { 4 xxx int 5 ... 6} 7 8type UserDefinedStruct2 struct { 9 yyy int 10 ... 11} 12 13type UserDefinedStruct3 struct { 14 zzz int 15 ... 16} 17 18... 19
試したこと
現状は、やり方が見つかっていないため下記のようになってしまいます。メソッドのため、型パラメータは使えず。
package(A)
1 2func (<レシーバー>) Hoge (argData any) any { 3 4 var sliceSample []any 5 6 for ... { 7 8 (json読み込み処理unmarshalで、argDataに都度セット) 9 10 sliceSample = append(sliceSample, argData) 11 12 } 13 14 return sliceSample // この戻り値型は interface{} | map[string]interface{} → 例. interface{} | UserDefinedStruct1 のようにしたい 15}
引数[]anyを追加して外から渡そうとしましたが、[]anyにはany以外の型で構成されるスライス(例.[]string)はセットできないのでダメでした。
Hoge (argData any, sliceParam []any) // []anyは他の型のスライス渡しができないので、却下
また、anyの引数を追加してそこに[]UserDefinedStruct1をセットする方法も試しましたが、追加引数が型[]Typeとして使用できないためエラーでした。
Hoge (argData any, sliceParam any) { sliceParam = append(sliceParam, argData) // そもそもsliceSampleを[]Typeとして使用できずエラー }
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/09/02 01:33
2022/09/02 02:56
2022/09/02 03:23
2022/09/09 01:40