En Go, les tableaux sont peu flexibles (car leur longueur est encodée dans leur type) et coûteux à passer aux fonctions (car une fonction opère sur une copie de ses arguments de tableau). Je suppose que vous aimeriez opérer sur tranches plutôt que sur des tableaux.
Parce que les méthodes ne peuvent pas prendre d'arguments de type supplémentaires vous ne pouvez pas simplement déclarer un générique Map
méthode en Go. Cependant, vous pouvez définir Map
en tant que générique fonction supérieure :
func Map[T, U any](ts []T, f func(T) U) []U {
us := make([]U, len(ts))
for i := range ts {
us[i] = f(ts[i])
}
return us
}
Vous pouvez alors écrire le code suivant,
names := []string{"Alice", "Bob", "Carol"}
fmt.Println(Map(names, utf8.RuneCountInString))
qui imprime [5 3 5]
vers stdout (essayez-le dans ce terrain de jeu ).
Go 1.18 a vu l'ajout de a golang.org/x/exp/slices
paquet qui permet d'effectuer de nombreuses opérations pratiques sur les tranches. Map
en est notablement absente. L'omission de cette fonction a été le résultat d'une longue discussion au sein de l'équipe de l Numéro de GitHub dédié à la golang.org/x/exp/slices
proposition ; les préoccupations étaient notamment les suivantes :
Russ Cox en fin de compte, a choisi d'abandonner Map
de la proposition parce que c'est
Il est probablement préférable de l'intégrer dans une API de flux plus complète, située ailleurs.