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

gzszwxb4  于 2023-11-14  发布在  Go
关注(0)|答案(1)|浏览(128)

我有一个简单的Web服务器的代码,但我不明白这段代码:
方法:app.routes(),

  1. const webPort = "80"
  2. type Config struct {}
  3. func main() {
  4. app := Config{}
  5. log.Printf("Starting broker service on port %s\n",webPort)
  6. srv := &http.Server{
  7. Addr: fmt.Sprintf(":%s",webPort),
  8. Handler:app.routes(),
  9. }
  10. err := srv.ListenAndServe()
  11. if(err != nil) {
  12. log.Panic(err)
  13. }
  14. }

字符串
在routes文件中:

  1. func (app *Config) routes() http.Handler {
  2. mux := chi.NewRouter()
  3. mux.Use(cors.Handler(cors.Options{
  4. AllowedOrigins: []string{"http://*","https://*"},
  5. AllowedMethods: []string{"GET", "POST", "DELETE","PUT","OPTIONS"},
  6. AllowedHeaders: []string{"Accept","Authorization","Content-Type","X-CSRF-Token"},
  7. ExposedHeaders: []string{"Link"},
  8. AllowCredentials:true,
  9. MaxAge:300,
  10. }))
  11. mux.Use(middleware.Heartbeat("/ping"))
  12. mux.Post("/",app.Broker)
  13. return mux
  14. }


这是工作的,当收到请求时调用了routes()函数,但是当它附加到一个空结构体时,这个routes()是如何知道被触发的呢?

  1. app := Config{}


应用程序从哪里知道routes()?
函数中的func (app *Config)是什么?

ckocjqey

ckocjqey1#

路由已连接到HTTP服务器,如下所示。

  1. srv := &http.Server{
  2. Addr: ":8081", // port
  3. Handler: app.routes() // a handler to invoke
  4. }

字符串
routesConfig结构的一个方法。即使Config为空,我们仍然可以像代码中那样调用routes方法。

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


Config结构体在这里充当方法接收器。

相关问题