微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Go默认servemux异常消失的怪异错误

如何解决Go默认servemux异常消失的怪异错误

在实施Go的认servemux时遇到了一个奇怪的错误。问题是此错误持续了一天,然后突然消失,代码完全没有变化。我想通过简单的登录注册页面以及模板来进行练习。

我出于兴趣将其发布在这里,以查看是否有更聪明的人可以弄清楚为什么会发生这种情况。

复制步骤:

  1. 运行go应用“ main.go”
  2. 在浏览器中转到http:// localhost:8080 / login-登录页面加载正常。
  3. 尝试http:// localhost:8080 / register-程序崩溃并退出

在控制台中,我收到此错误

2020/09/28 10:53:19 &{0xc00005eb40 0xc000232000 {} 0xed9c60 false false false false 0 {0 0} 0xc000210040 {0xc0002180e0 map[] false false} map[] false 0 -1 0 false false [] 0 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0] [0 0 0] 0xc000216070 0} 500 template: no template "register.gohtml" associated with 
template "login.gohtml"
exit status 1

这是我的文件结构:

Package
   -views
      -login.gohtml
      -register.gohtml
   -model
   -controllers
   -main.go

目前,这些模板只是一个基本的html样板,分别表示“这是登录名”和“这是注册”,以进行测试。

这是main.go中的代码

package main

import (
    "log"
    "net/http"
    "text/template"
)

//Globals
var tpl *template.Template

//Parsing initial templates removes need to parse at response function.
func init() {
    tpl = template.Must(template.ParseGlob("./views/*.gohtml"))
}

//Router
func main() {
    http.HandleFunc("/",login)
    http.HandleFunc("/register/",register)
    http.HandleFunc("/login/",login)

    http.ListenAndServe(":8080",nil)
}

//Login page handler
func login(w http.ResponseWriter,req *http.Request) {
    err := tpl.ExecuteTemplate(w,"login.gohtml",nil)
    if err != nil {
        log.Fatalln(w,http.StatusInternalServerError,err)
    }
}

//Register page handler
func register(w http.ResponseWriter,"register.gohtml",err)
    }
}

正如我所说的,由于某种原因,它只是重新开始工作,而无需更改代码或只花费时间。

解决方法

正如您在golang sources中看到的那样,log.Fatal(ln|f)将触发os.Exit(1)

我假设您遇到register.gohtml的问题,请尝试仅打印该错误以了解它,而不是使用Fatal失败。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。