Sono curioso di sapere il motivo per cui Go does't implicitamente convertito []T
a []interface{}
quando sarà convertire implicitamente T
a interface{}
. C'è qualcosa di non banale in questa conversione che mi manca?
Esempio:
func foo([]interface{}) { /* do something */ }
func main() {
var a []string = []string{"hello", "world"}
foo(a)
}
go build
si lamenta
non è possibile utilizzare una stringa (tipo []) come tipo [] interfaccia {} nell'argomento della funzione
E se provo a farlo esplicitamente, stessa cosa: si b := []interface{}(a)
lamenta
impossibile convertire una stringa (tipo []) in tipo [] interfaccia {}
Quindi ogni volta che devo fare questa conversione (che sembra venire molto), ho fatto qualcosa del genere:
b = make([]interface{}, len(a), len(a))
for i := range a {
b[i] = a[i]
}
C'è un modo migliore per farlo o funzioni di libreria standard per aiutare con queste conversioni? Sembra un po 'sciocco scrivere 4 righe di codice in più ogni volta che voglio chiamare una funzione che può prendere un elenco di ad es o stringhe.