Maison >développement back-end >Golang >Comment convertir en toute sécurité une tranche de chaînes en une tranche d'interfaces dans Go ?
Gestion du transtypage dans Go : conversion de tranches de chaînes en interfaces
Dans Go, le type interface{} permet de représenter des valeurs de tout type . Cependant, comme expliqué dans la question, cela ne signifie pas que []interface{} peut être directement assimilée à des tranches de tout autre type.
Casting de type avec interfaces
Interface{} est un type distinct dans Go, et des valeurs d'autres types ne peuvent lui être attribuées qu'en copiant leurs données. Par exemple, la conversion d'une tranche de chaînes en une tranche d'interfaces nécessite de copier chaque élément de chaîne individuellement :
func stringToInterface(strs []string) []interface{} { interfaces := make([]interface{}, len(strs)) for i, str := range strs { interfaces[i] = str } return interfaces }
Exemple de transtypage
Considérons l'exemple suivant :
package main import "fmt" func main() { strs := []string{"a", "b", "c"} interfaces := stringToInterface(strs) fmt.Println("Original slice of strings:", strs) fmt.Println("Converted slice of interfaces:", interfaces) }
Sortie :
Original slice of strings: [a b c] Converted slice of interfaces: [a b c]
Ici, la fonction stringToInterface crée une nouvelle tranche d'interfaces en copiant les données de la tranche de chaînes.
Fonctions de transtypage personnalisées
La conversion décrite ci-dessus peut également être généralisée en une fonction personnalisable qui gère transtypage entre différents types de tranche :
func typeCast[T any, U any](slice []T) []U { result := make([]U, len(slice)) for i, v := range slice { result[i] = interface{}(v).(U) } return result }
Cette fonction prend une tranche de type T et renvoie une nouvelle tranche de type U. Elle copie chaque élément individuellement, garantissant la sécurité du type.
Solutions alternatives
Vous pouvez également envisager d'utiliser un type prédéfini qui encapsule vos besoins spécifiques en matière de données. Par exemple, un type personnalisé représentant une collection de n'importe quel type pourrait être défini et utilisé à la place de []interface{}.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!