あなたの例では、あなたがそれに含まれる各項目は、むしろinterface{}
あるスライスを持っています言うよりも、単一interface{}
は、このような理由のために、あなたはそのようなので、単純にコレクション全体を変換することはできません、[]float32
を表します。代わりに、それを反復して、コレクション内の各項目に対して型アサーションを実行する必要があります。ここに例があります。 https://play.golang.org/p/dD4161xgaV
bound := []interface{}{1.00, 1.00, 1.00, 1.00}
new_bound := []float64{}
for _, v := range bound {
new_bound = append(new_bound, v.(float64))
}
注意すべきもうひとつ、それらのリテラルは、その種類は暗示があり、それはあなたが実際にここにいることを必要float64
です。
EDIT:OneOfOneによって投稿この、より最適化されたソリューションを含みます。
func main() {
bound := []interface{}{1.00, 1.10, 1.11, 1.111}
new_bound := make([]float64, len(bound))
for i := range bound {
new_bound[i] = bound[i].(float64)
}
fmt.Println(new_bound)
}
ちょうど一般的なGoのコメント:「一般的」にしようとするコードの場合は、Goのジェネリックをあきらめてください。 'interface {}'を使うことは、Javaの 'Object'よりもずっと悪いことです。それは遅く、右に行くのが難しく、多くのバグやコードパニックなどにつながります。もしあなたが、さまざまなタイプのために同様のコードをたくさん必要とするのであれば、代わりにコードジェネレータを書いてください。最適化の便宜上 –