Je suis curieux de savoir pourquoi Go ne se convertit []T
pas implicitement en []interface{}
quand il se convertira implicitement T
en interface{}
. Y a-t-il quelque chose de non trivial dans cette conversion qui me manque?
Exemple:
func foo([]interface{}) { /* do something */ }
func main() {
var a []string = []string{"hello", "world"}
foo(a)
}
go build
Se plaint
impossible d'utiliser une chaîne (type []) comme type [] interface {} dans l'argument de la fonction
Et si j'essaye de le faire explicitement, même chose: se b := []interface{}(a)
plaindre
impossible de convertir une (type [] string) en type [] interface {}
Donc, chaque fois que j'ai besoin de faire cette conversion (ce qui semble arriver souvent), j'ai fait quelque chose comme ceci:
b = make([]interface{}, len(a), len(a))
for i := range a {
b[i] = a[i]
}
Existe-t-il une meilleure façon de faire cela, ou des fonctions de bibliothèque standard pour aider à ces conversions? Cela 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.