登录
首页 >  Golang >  Go问答

多个注册的恐慌:http:/static/

来源:stackoverflow

时间:2024-03-24 18:18:34 119浏览 收藏

在 Go 语言中,当尝试在多个端口上注册相同路径时,会引发“http: multiple registrations for /static/”错误。本文探讨了这一问题的根源,即为每个端口创建一个新的 HTTP 侦听器,导致重复注册同一路径。文章提供了解决方案,即使用一个 HTTP 侦听器和一个 ServeMux,为每个端口上的所有路径提供服务。这种方法消除了重复注册的问题,允许多个侦听器同时运行而不会产生错误。

问题内容

请考虑这个问题:

我必须在独特的端口上启动多个侦听器,例如:

function launchui(self *myobject) {
    fs := http.fileserver(http.dir(self.staticfs))
    http.handle("/static/", http.stripprefix("/static/", fs))
    go http.handlefunc("/login", self.loginhandler)

    errx := http.listenandservetls(self.uiport, self.cert, self.key, nil)
    if errx != nil {
        fmt.println("http listen err", errx)
        panic("http listen")
    }
}

listofobjects := []*myobject{} 
for _, obj := range(listofobjects){
     obj.launchui()
    
}

其中每个都位于唯一的 self.uiport 上,我必须为每个对象提供 /static//login 。非常简单的东西。除非,如果我的 listofobjects 中有多个项目,则会爆炸:

panic: http: multiple registrations for /static/ 

goroutine 7 [running]:
net/http.(*ServeMux).Handle(0x4da250, 0x2b8830, 0x1, 0x324f68, 0x12183a8)
    /usr/local/go/src/net/http/server.go:2403 +0x278
net/http.(*ServeMux).HandleFunc(...)
    /usr/local/go/src/net/http/server.go:2440
net/http.HandleFunc(...)
    /usr/local/go/src/net/http/server.go:2452
main.(*userStruct).startUI(0x10d6160)

您能告诉我如何解决这个问题吗?


解决方案


function launchUI(self *myObject) {
    fs := http.FileServer(http.Dir(self.staticFs))
    mux := http.NewServeMux()
    mux.Handle("/static/", http.StripPrefix("/static/", fs))
    mux.HandleFunc("/login", self.loginHandler)

    errx := http.ListenAndServeTLS(self.uiport, self.cert, self.key, mux)
    if errx != nil {
        fmt.Println("http Listen err", errx)
        panic("http Listen")
    }
}

好了,本文到此结束,带大家了解了《多个注册的恐慌:http:/static/》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

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