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) }
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++ }
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") }
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)
Une méthode, ServeHTTP, est ajoutée à ce type :
func (f HandlerFunc) ServeHTTP(c *Conn, req *Request) { f(c, req) }
La fonction notFound peut désormais être convertie en une instance de HandlerFunc et affecté à une variable :
var Handle404 = HandlerFunc(notFound)
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!