为什么未使用的方法中的代码运行?

时间:2018-02-09 08:59:05

标签: go

以下代码来自Todd Mcleod的Golang web-dev课程。我无法理解 - 甚至一遍又一遍地观看他的视频并搜索关于方法的所有内容 - 如下:方法ServeHTTP附加到类型热狗,但从未运行过。仍然是方法中的代码(在这种情况下是执行Fprintln(...)。(当你运行这段代码并转到localhost:8080时,它会播放“你想要的这个函数中的任何代码”。)可以有谁解释我为什么会这样?

非常感谢!

package main

import (
    "fmt"
     "net/http"
)

type hotdog int

 func (m hotdog) ServeHTTP(w http.ResponseWriter, r *http.Request) {
     fmt.Fprintln(w, "Any code you want in this func")
}

 func main() {
    var d hotdog
    http.ListenAndServe(":8080", d)
}

3 个答案:

答案 0 :(得分:5)

它运行。 ListenAndServe会针对您的服务器发出的每个请求调用它。

答案 1 :(得分:1)

由于您通过hotdog实现ServeHTTP作为处理程序,因此收到的每个请求都将发送到热狗的ServeHTTP

答案 2 :(得分:1)

使用类型热狗时运行此功能

func (m hotdog) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Any code you want in this func")
}

在主要的你用类型hotdog创建变量d,

然后在ListenAndServe中,你告诉你的代码每次有人连接到你的服务器时使用变量d,并且因为d是热狗类型,你每次有人连接时都会运行第一个函数

func main() {
    var d hotdog
    http.ListenAndServe(":8080", d)
}