Maison > développement back-end > Golang > Go ne comprend pas comment http.Server Handler appelle les fonctions attachées à des structures vides

Go ne comprend pas comment http.Server Handler appelle les fonctions attachées à des structures vides

WBOY
Libérer: 2024-02-10 16:00:11
avant
615 Les gens l'ont consulté

Go 不理解 http.Server Handler 如何调用附加到空结构的函数

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.

Contenu de la question

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)
    }
}
Copier après la connexion

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
}
Copier après la connexion

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{}
Copier après la connexion

Où l'application connaît-elle les itinéraires () ?

Qu'est-ce que func (app *config) en fonction ?

Solution

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
 }

Copier après la connexion

routesconfig 结构体的一个方法。即使 config 为空,我们仍然可以像代码中那样调用 routes Méthode.

 cfg := Config{}
 r := cfg.routes()

Copier après la connexion

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!

É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