php-Editor Banana ist hier, um eine Frage zur Go-Sprache zu beantworten: Go versteht nicht, wie der http.Server-Handler Funktionen aufruft, die an leere Strukturen angehängt sind. In der Go-Sprache ist http.Server eine Struktur zur Verarbeitung von HTTP-Anfragen, und das Handler-Feld ist ein Schnittstellentyp. Ein Schnittstellentyp ist ein spezieller Typ, der eine Reihe von Methoden definiert. Wenn wir dem Handler-Feld eine Funktion zuweisen, verwendet die Go-Sprache den Reflexionsmechanismus, um die Funktion aufzurufen. Wenn wir jedoch eine Funktion an eine leere Struktur anhängen, versteht die Go-Sprache nicht, wie die Funktion korrekt aufgerufen wird. Dies liegt daran, dass beim Aufruf einer Methode für eine leere Struktur die tatsächliche Objektinstanz nicht abgerufen werden kann. Um dieses Problem zu lösen, können wir Abschlüsse oder Methoden mit Empfängern verwenden.
Ich habe einen Code für einen einfachen Webserver, aber ich verstehe diesen Code nicht:
Handler: 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) } }
In der Routendatei:
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 }
Dies ist im Grunde die Funktion „routes()“, die aufgerufen wird, wenn eine Anfrage eingeht. Aber woher weiß diese Route(), dass sie ausgelöst wird, wenn sie an eine leere Struktur angehängt wird?
app := Config{}
Woher weiß die Anwendung über Routen() Bescheid?
Was ist func (app *config)
in der Funktion?
Die Route wird wie unten gezeigt an den http-Server angehängt.
srv := &http.server{ addr: ":8081", // port handler: app.routes() // a handler to invoke }
routes
是 config
结构体的一个方法。即使 config
为空,我们仍然可以像代码中那样调用 routes
Methode.
cfg := Config{} r := cfg.routes()
config
Die Struktur fungiert hier als Methodenempfänger.
Das obige ist der detaillierte Inhalt vonGo versteht nicht, wie der http.Server-Handler Funktionen aufruft, die an leere Strukturen angehängt sind. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!