Maison >développement back-end >Golang >Comment puis-je transférer efficacement des données entre des structures Go avec des membres identiques mais de types différents ?

Comment puis-je transférer efficacement des données entre des structures Go avec des membres identiques mais de types différents ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-10 02:18:13533parcourir

How Can I Efficiently Transfer Data Between Go Structs with Identical Members but Different Types?

Copier des structures avec des membres identiques et des types de variantes

Dans Go, il n'est pas rare d'avoir des structures avec des membres identiques mais des types différents. Prenons l'exemple suivant :

type Common struct {
    Gender int
    From   string
    To     string
}

type Foo struct {
    Id    string
    Name  string
    Extra Common
}

type Bar struct {
    Id    string
    Name  string
    Extra Common
}

Étant donné une instance de Foo et Bar, comment pouvons-nous transférer des données de l'un à l'autre ?

Solution : Conversion

Étant donné que les types sous-jacents de Foo et Bar sont identiques à l'exception des balises struct, Go propose une solution simple : la conversion. En convertissant la valeur Foo en type Bar, nous écrasons efficacement les données existantes dans Bar. Voici le code :

foo := Foo{Id: "123", Name: "Joe"}
bar := Bar(foo)

Exemple

Testons la conversion dans un exemple de terrain de jeu : https://go.dev/play/p/1W3EXQVXVhS.

Limitations

Il convient de noter que la conversion ne fonctionne que lorsque les types sous-jacents sont les mêmes, à l'exception de struct balises. Si les types sous-jacents diffèrent considérablement, la création d'une fonction de copie dédiée serait nécessaire.

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