Introduction
Les interfaces en programmation définissent un ensemble de méthodes qu'un type doit implémenter pour être considéré comme une implémentation d’interface valide. Lorsqu'une fonction implémente une interface, sa signature de méthode doit correspondre à la signature de méthode de l'interface.
Interface et implémentation
Dans ce cas, nous avons l'interface suivante :
type Handler interface { ServeHTTP(*Conn, *Request) }
Cette interface définit une méthode appelée ServeHTTP, qui prend un Conn et une Request comme arguments.
L'implémentation suivante du type Counter satisfait l'interface Handler :
type Counter int func (ctr *Counter) ServeHTTP(c *http.Conn, req *http.Request) { fmt.Fprintf(c, "counter = %d\n", ctr); ctr++; }
Conversion d'une fonction pour implémenter l'interface
Parfois, nous pouvons avoir une fonction qui correspond à la signature de la méthode d'interface mais qui n'est pas directement implémentée en tant que méthode. Dans de tels cas, la technique suivante peut être utilisée pour convertir la fonction en une implémentation d'interface :
// Now we define a type to implement ServeHTTP: type HandlerFunc func(*Conn, *Request) func (f HandlerFunc) ServeHTTP(c *Conn, req *Request) { f(c, req) // the receiver's a func; call it } // Convert function to attach method, implement the interface: var Handle404 = HandlerFunc(notFound);
Dans cet exemple, la fonction notFound n'est pas une méthode, mais elle correspond à la signature de la méthode ServeHTTP. Pour le rendre compatible avec l'interface Handler, nous créons un type HandlerFunc qui encapsule la fonction dans une méthode. Ensuite, nous créons une instance de HandlerFunc avec notFound comme valeur. Cette instance, Handle404, implémente désormais l'interface Handler et peut être utilisée comme une implémentation valide.
Résumé
Cette technique montre comment les fonctions qui satisfont à la signature de méthode d'une interface peuvent être converties en implémentations d'interface, même s'il ne s'agit pas de méthodes d'un type personnalisé. Cette approche est particulièrement utile lorsque vous travaillez avec des fonctions existantes qui doivent être adoptées dans des systèmes basés sur une interface.
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!