Je suis curieux de savoir pourquoi Go ne convertit pas implicitement []T
a []interface{}
alors qu'il convertira implicitement T
a interface{}
. Y a-t-il quelque chose de non trivial dans cette conversion qui m'échappe ?
Exemple :
func foo([]interface{}) { /* do something */ }
func main() {
var a []string = []string{"hello", "world"}
foo(a)
}
go build
se plaint
ne peut pas utiliser un (type []string) comme type []interface {} dans l'argument d'une fonction
Et si j'essaie de le faire explicitement, c'est la même chose : b := []interface{}(a)
se plaint
ne peut pas convertir un (type []string) en type []interface {}
Ainsi, chaque fois que j'ai besoin d'effectuer cette conversion (ce qui semble se produire souvent), j'ai procédé de la manière suivante :
b = make([]interface{}, len(a), len(a))
for i := range a {
b[i] = a[i]
}
Existe-t-il une meilleure façon de procéder, ou des fonctions de la bibliothèque standard pour faciliter ces conversions ? Il me semble un peu idiot d'écrire 4 lignes de code supplémentaires à chaque fois que je veux appeler une fonction qui peut prendre une liste d'ints ou de chaînes, par exemple.