Maison > développement back-end > Golang > Comment puis-je convertir en toute sécurité un pointeur Struct en interface et inversement ?

Comment puis-je convertir en toute sécurité un pointeur Struct en interface et inversement ?

Mary-Kate Olsen
Libérer: 2024-12-13 16:41:10
original
339 Les gens l'ont consulté

How Can I Safely Convert a Struct Pointer to an Interface and Back in Go?

Conversion du pointeur Struct en interface

Considérez le scénario suivant :

type foo struct{}

func bar(baz interface{}) {}
Copier après la connexion

Étant donné que foo et bar sont immuables et baz doit être restauré en un pointeur foo struct dans bar, le problème se pose : comment pouvez-vous lancer &foo{} en interface{} à utiliser comme paramètre dans la barre ?

Solution

La conversion de &foo{} en interface{} est simple :

f := &foo{}
bar(f) // Every type implements interface{}. No special action is needed.
Copier après la connexion

Pour revenir à *foo, vous pouvez effectuer soit :

Tapez Assertion

func bar(baz interface{}) {
    f, ok := baz.(*foo)
    if !ok {
        // The assertion failed because baz was not of type *foo.
    }

    // f is of type *foo
}
Copier après la connexion

Type Switch

func bar(baz interface{}) {
    switch f := baz.(type) {
    case *foo: // f is of type *foo
    default: // f is some other type
    }
}
Copier après la connexion

En utilisant ces techniques, vous pouvez convertir avec succès des pointeurs de structure en interfaces et les restaurer en pointeurs de structure au sein des fonctions.

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