登录
首页 >  Golang >  Go问答

golangservehttp调用自己?

来源:stackoverflow

时间:2024-02-18 10:51:26 407浏览 收藏

大家好,我们又见面了啊~本文《golangservehttp调用自己?》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

实在无法理解servehttp。我知道它是处理程序的接口,任何实现 servehttp 的对象都可以充当处理程序。我的问题是源代码

func (sh serverHandler) ServeHTTP(rw ResponseWriter, req *Request) {
    handler := sh.srv.Handler
    if handler == nil {
        handler = DefaultServeMux
    }
    handler.ServeHTTP(rw, req)
}

这行handler.servehttp似乎又在调用自己了? handler 基本上是 server.handler 所以它再次调用自己?这里这个方法的目的是什么?这只是原型吗?有人可以解释一下,当您没有实现自己的servehttp 时。这个功能是如何工作的?


正确答案


serverhandler 是一个适配器,其目的是进行设置,以便在将 nil 处理程序传递给 servehttp 时使用 defaultservemuxnet/http 包充满了 http.handler 接口的实现,因为它非常有用且可组合。

它是这样创建的:

serverhandler{c.server}.servehttp(w, w.req)

c.server(连接的服务器)是 sh.srv 正在访问的内容。 所以它没有调用自己。请注意,server 类型为:

// A Server defines parameters for running an HTTP server.
// The zero value for Server is a valid configuration.
type Server struct {
    // Addr optionally specifies the TCP address for the server to listen on,
    // in the form "host:port". If empty, ":http" (port 80) is used.
    // The service names are defined in RFC 6335 and assigned by IANA.
    // See net.Dial for details of the address format.
    Addr string

    Handler Handler // handler to invoke, http.DefaultServeMux if nil

    {...} other fields
}

handler 字段可以合法地为 nilserverhandler 的目标就是处理这种情况。

我想您会对阅读 this post 感兴趣,它详细解释了 net/http 包中的事件流程。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>