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
Libérer: 2024-12-25 03:42:17
original
895 Les gens l'ont consulté

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
}
Copier après la connexion

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)
}
Copier après la connexion

Sortie :

Original slice of strings: [a b c]
Converted slice of interfaces: [a b c]
Copier après la connexion

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal