Maison >développement back-end >Golang >Comment convertir en toute sécurité une tranche de chaînes en une tranche d'interfaces dans Go ?

Comment convertir en toute sécurité une tranche de chaînes en une tranche d'interfaces dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-25 03:42:17834parcourir

How Do I Safely Convert a Slice of Strings to a Slice of Interfaces in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn