l'éditeur php Banana est là pour répondre à une question sur le langage Go : Go ne comprend pas comment http.Server Handler appelle les fonctions attachées à des structures vides. Dans le langage Go, http.Server est une structure utilisée pour traiter les requêtes HTTP, et le champ Handler est un type d'interface. Un type d'interface est un type spécial qui définit un ensemble de méthodes. Lorsque nous attribuons une fonction au champ Handler, le langage Go utilisera le mécanisme de réflexion pour appeler la fonction. Cependant, si l’on attache une fonction à une structure vide, le langage Go ne comprendra pas comment appeler correctement la fonction. En effet, lorsqu'une méthode est appelée sur une structure vide, l'instance réelle de l'objet ne peut pas être obtenue. Pour résoudre ce problème, nous pouvons utiliser des fermetures ou des méthodes avec des récepteurs.
J'ai un code pour un serveur web simple mais je ne comprends pas ce code :
Gestionnaire : app.routes(),
const webport = "80" type config struct {} func main() { app := config{} log.printf("starting broker service on port %s\n",webport) srv := &http.server{ addr: fmt.sprintf(":%s",webport), handler:app.routes(), } err := srv.listenandserve() if(err != nil) { log.panic(err) } }
Dans le fichier itinéraire :
func (app *config) routes() http.handler { mux := chi.newrouter() mux.use(cors.handler(cors.options{ allowedorigins: []string{"http://*","https://*"}, allowedmethods: []string{"get", "post", "delete","put","options"}, allowedheaders: []string{"accept","authorization","content-type","x-csrf-token"}, exposedheaders: []string{"link"}, allowcredentials:true, maxage:300, })) mux.use(middleware.heartbeat("/ping")) mux.post("/",app.broker) return mux }
Il s'agit en fait de la fonction routes() appelée lorsqu'une requête est reçue, Mais comment ce routes() sait-il qu'il est déclenché lorsqu'il est attaché à une structure vide ?
app := Config{}
Où l'application connaît-elle les itinéraires () ?
Qu'est-ce que func (app *config)
en fonction ?
La route est attachée au serveur http comme indiqué ci-dessous.
srv := &http.server{ addr: ":8081", // port handler: app.routes() // a handler to invoke }
routes
是 config
结构体的一个方法。即使 config
为空,我们仍然可以像代码中那样调用 routes
Méthode.
cfg := Config{} r := cfg.routes()
config
La structure agit ici comme un récepteur de méthode.
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!