
在 Go 中,func (*myHandler) ServeHTTP(...) 中的 (*myHandler) 是方法接收者,表示该函数是 *myHandler 类型的方法,而非普通函数;它使 myHandler 实现 http.Handler 接口,从而可被 HTTP 服务器调用。
在 go 中,`func (*myhandler) servehttp(...)` 中的 `(*myhandler)` 是方法接收者,表示该函数是 `*myhandler` 类型的方法,而非普通函数;它使 `myhandler` 实现 `http.handler` 接口,从而可被 http 服务器调用。
在 Go 的 HTTP 服务开发中,实现自定义处理器的核心在于让结构体(或其指针)满足 http.Handler 接口——该接口仅要求一个方法:
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
要满足此接口,你必须为某个类型显式声明名为 ServeHTTP 的方法,且签名完全一致。此时,(*myHandler) 就是这个方法的接收者(receiver),它决定了该方法属于哪个类型。
✅ 正确示例:
type myHandler struct{}
func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello from myHandler!")
}
// 使用方式
http.ListenAndServe(":8080", &myHandler{})
⚠️ 注意事项:
- (*myHandler) 表示“指向 myHandler 的指针”类型的方法;若写成 (myHandler),则是值类型方法。两者均可实现接口,但指针接收者更常见(避免拷贝,且便于后续扩展字段修改)。
- 接收者类型 T 或 *T 中的 T 必须是在同一包内定义的命名类型(如 type myHandler struct{}),不能是内置类型(如 *int)或未命名结构体字面量。
- 接收者不是参数,不参与函数调用传参;它是方法归属的标识,也决定了方法能否访问和修改接收者状态(指针接收者可修改字段,值接收者只能读取副本)。
? 小结:func (*myHandler) ServeHTTP(...) 不是函数声明的返回类型,而是 Go 特有的方法绑定语法——它将 ServeHTTP 绑定到 *myHandler 类型上,使其自动满足 http.Handler 接口,成为可直接传入 http.ListenAndServe 的合法处理器。这是 Go 面向接口编程与隐式实现机制的关键体现。











