任意のスライスを取ることができる関数を表現したいと思います。私はこれを行うことができると考えた:任意のスライスを取るExpress関数
some_other_fun(..)
自体が
interface{}
型を取る
func myFunc(list []interface{}) {
for _, i := range list {
...
some_other_fun(i)
...
}
}
。ただし、[]DEFINITE_TYPE
を[]interface{}
として渡すことができないため、これは機能しません。参照:https://golang.org/doc/faq#convert_slice_of_interface []インタフェース{}の表現が異なることに注意してください。この答えは理由をまとめたものですが、インターフェイスのスライスではなくインターフェイスへのポインタに関しては理由は同じです:Why can't I assign a *Struct to an *Interface?。
上記のgolang.orgリンクで提案されている提案は、DEFINITE_TYPE
スライスから新しいインターフェイススライスを再構築することを示唆しています。しかし、私はこの関数を呼び出したいコードのどこでも行うのは現実的ではありません(この関数はそれ自体が9行のコードを省略することを意図していますが、9行はコード内で頻繁に表示されます)。
私が最初に考えた[]*DEFINITE_TYPE
を渡すことになるすべての場合、私はWhy can't I assign a *Struct to an *Interface?(これも上記にリンクされています)を発見するまで抽象化しやすくなりました。
さらに、別のDEFINITE_TYPE
の関数を呼び出すたびに、n個の型のn個の例を実装しても、コードの行を節約したり、コードを明確にすることはできません(まったく逆です)。
9行は私たちのコードでは慣習的なので、私はこれを行うことができません。私は本当にジェネリック薬が足りない。本当にこれを行う方法はありませんか?