Maison > développement back-end > Golang > le corps du texte

Interface d'instanciation

WBOY
Libérer: 2024-02-08 21:08:41
avant
401 Les gens l'ont consulté

Interface dinstanciation

L'éditeur PHP Youzi est là pour vous présenter ce qu'est une interface d'instanciation. En programmation orientée objet, une interface est une convention qui définit les méthodes qu'une classe doit implémenter. L'instanciation d'une interface fait référence à la création d'un objet d'une classe pour implémenter les méthodes définies dans l'interface. En instanciant l'interface, nous pouvons profiter de la fonctionnalité polymorphe afin que différentes classes puissent implémenter la même interface et réécrire les méthodes correspondantes en fonction de la situation réelle. L'utilisation d'interfaces d'instanciation peut rendre notre code plus flexible et extensible, et améliorer la réutilisabilité et la maintenabilité du code. Examinons de plus près l'utilisation et les précautions de l'interface instanciée.

Contenu des questions


Je suis nouveau. Une chose que je ne comprends pas, c'est pourquoi j'obtiens une erreur de compilation lorsque je souhaite instancier l'interface individuellement, mais pas lorsque j'utilise la forme tableau de l'interface.

type Flag interface {
  fmt.Stringer
}

func TestCheckRequiredFlag(t *testing.T) {
    testdata := []struct {
        st []Flag
    }{
        {
            st: []Flag{//allowed
                &StringFlag{Name: ""},
            },
        },
    }

    st := struct {
        st Flag
    }{
        st: Flag{// is not allowed
            &StringFlag{Name: ""},
        },
    }
}
Copier après la connexion

Ce littéral composé alloue une nouvelle instance de structure avec la valeur donnée.


Solution de contournement


accolades {} 用于切片、结构、数组和映射的文字值。它们不用于接口值。如果您想要接口类型的文字值,则必须使用 () syntaxe, qui appelle "conversion de type".

Par exemple :

x := myinterface(&mystruct{})
Copier après la connexion

x 的类型为 myinterface.

Pour corriger votre code :

    st := struct {
        st flag
    }{
        st: flag(
            &stringflag{name: ""},
        ),
    }
Copier après la connexion

Vous pouvez également supprimer complètement la conversion de type, car go permet l'affectation directe aux valeurs d'interface et la conversion est implicite. Plus précisément, la règle Assignability dit (éditée pour plus de clarté) :

Si t est un type d'interface et que x implémente t, alors une valeur x de type v est attribuable à une variable de type t.

Donc, ce code fonctionnera aussi :

    st := struct {
        st Flag
    }{
        st: &StringFlag{Name: ""},
    }
Copier après la connexion

Notez que dans les littéraux composés tels que les tranches, les structures et les cartes, les valeurs données sont traitées attribuées à leurs index, champs ou clés respectifs comme s'il s'agissait de variables, donc les règles d'assignation s'appliquent.

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!

Étiquettes associées:
source:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal