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

Comment les fonctions peuvent-elles être utilisées pour implémenter des interfaces dans Go ?

Mary-Kate Olsen
Libérer: 2024-11-06 12:53:02
original
372 Les gens l'ont consulté

How can functions be used to implement interfaces in Go?

Fonctions implémentant des interfaces dans Go

Dans Go, les interfaces définissent un ensemble de méthodes qu'un type doit implémenter pour être considéré comme membre de celui-ci. interface. Cela permet un comportement polymorphe, car les types implémentant la même interface peuvent être utilisés de manière interchangeable dans le code.

Exemple 1 : interface d'implémentation de type personnalisé

Considérez l'interface suivante pour un Gestionnaire HTTP :

type Handler interface {
    ServeHTTP(*Conn, *Request)
}
Copier après la connexion

Le type suivant, Counter, implémente cette interface en fournissant une implémentation personnalisée de ServeHTTP :

type Counter int

func (ctr *Counter) ServeHTTP(c *Conn, req *Request) {
    fmt.Fprintf(c, "counter = %d\n", ctr)
    ctr++
}
Copier après la connexion

Exemple 2 : Conversion d'une fonction en gestionnaire

La fonction suivante, notFound, n'implémente pas directement l'interface Handler :

func notFound(c *Conn, req *Request) {
    c.SetHeader("Content-Type", "text/plain;", "charset=utf-8")
    c.WriteHeader(StatusNotFound)
    c.WriteString("404 page not found\n")
}
Copier après la connexion

Pour rendre cette fonction compatible avec l'interface Handler, Go fournit un moyen de convertir une fonction en tapez avec une méthode spécifique. Dans ce cas, le type HandlerFunc est défini :

type HandlerFunc func(*Conn, *Request)
Copier après la connexion

Une méthode, ServeHTTP, est ajoutée à ce type :

func (f HandlerFunc) ServeHTTP(c *Conn, req *Request) {
    f(c, req)
}
Copier après la connexion

La fonction notFound peut désormais être convertie en une instance de HandlerFunc et affecté à une variable :

var Handle404 = HandlerFunc(notFound)
Copier après la connexion

Cela permet à Handle404 d'être utilisé comme Handler, même si la fonction notFound elle-même n'implémente pas directement l'interface Handler.

Explication

En résumé, Go permet de convertir des fonctions en types avec des méthodes spécifiques, résolvant les situations où une fonction ne répond pas directement aux exigences d'une interface. En créant une instance de type à partir de la fonction et en définissant une méthode sur ce type, la fonction peut être prise en charge par l'interface, permettant un comportement polymorphe dans le programme.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!