[]T
Go が に暗黙的に変換される[]interface{}
ときに、なぜ Go が暗黙的に に変換されないのか興味がT
ありinterface{}
ます。この変換について、私が見逃している重要なことはありますか?
例:
func foo([]interface{}) { /* do something */ }
func main() {
var a []string = []string{"hello", "world"}
foo(a)
}
go build
文句を言う
関数の引数で (type []string) を type []interface {} として使用することはできません
そして、私が明示的にそれをやろうとすると、同じこと:b := []interface{}(a)
文句を言う
(type []string) を type []interface {} に変換できません
したがって、この変換を行う必要があるたびに (これは頻繁に発生するようです)、次のようなことを行ってきました。
b = make([]interface{}, len(a), len(a))
for i := range a {
b[i] = a[i]
}
これを行うためのより良い方法、またはこれらの変換を支援する標準ライブラリ関数はありますか? int や文字列などのリストを取得できる関数を呼び出すたびに、4 行の余分なコードを記述するのはばかげているように思えます。