doukengzi3517 2015-10-18 10:42
浏览 55
已采纳

错误的GET页面请求

I'm new to Golang and I'm trying to create a simple web server but I'm getting an error in a GET request. This is the code:

import (
    "fmt"
    "html/template"
    "log"
    "net/http"
    "strings"
)

func sayhelloName(w http.ResponseWriter, r *http.Request) {
    r.ParseForm() 
    fmt.Println(r.Form) // print information on server side.
    fmt.Println("path", r.URL.Path)
    fmt.Println("scheme", r.URL.Scheme)
    fmt.Println(r.Form["url_long"])
    for k, v := range r.Form {
        fmt.Println("key:", k)
        fmt.Println("val:", strings.Join(v, ""))
    }
    fmt.Fprintf(w, "Hello Worrld!") // write data to response
}

func login(w http.ResponseWriter, r *http.Request) {
    fmt.Println("method:", r.Method) //get request method
    if r.Method == "GET" {
        t, _ := template.ParseFiles("login.gtpl")
        t.Execute(w, nil)
    } else {
        r.ParseForm()
        // logic part of log in
        fmt.Println("username:", r.Form["username"])
        fmt.Println("password:", r.Form["password"])
    }
}

func main() {
    http.HandleFunc("/", sayhelloName) // setting router rule
    http.HandleFunc("/login", login)
    err := http.ListenAndServe(":9090", nil) // setting listening port
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

sayhelloName works but not the login function. This is the output error:

method: GET
2015/10/18 12:46:28 http: panic serving 127.0.0.1:51714: runtime error: invalid memory address or nil pointer dereference
goroutine 6 [running]:
net/http.(*conn).serve.func1(0x1247aa20, 0xaf5380, 0x12490390)
    c:/go/src/net/http/server.go:1287 +0xa2
html/template.(*Template).escape(0x0, 0x0, 0x0)
    c:/go/src/html/template/template.go:79 +0x37
html/template.(*Template).Execute(0x0, 0xaf54e8, 0x12530080, 0x0, 0x0, 0x0, 0x0)
    c:/go/src/html/template/template.go:101 +0x2b
main.login(0xaf5468, 0x12530080, 0x124f6620)
    C:/Users/Fabio/Go/hello.go:30 +0x209
net/http.HandlerFunc.ServeHTTP(0x7462e4, 0xaf5468, 0x12530080, 0x124f6620)
    c:/go/src/net/http/server.go:1422 +0x34
net/http.(*ServeMux).ServeHTTP(0x1252a020, 0xaf5468, 0x12530080, 0x124f6620)
    c:/go/src/net/http/server.go:1699 +0x133
net/http.serverHandler.ServeHTTP(0x12476480, 0xaf5468, 0x12530080, 0x124f6620)
    c:/go/src/net/http/server.go:1862 +0x156
net/http.(*conn).serve(0x1247aa20)
    c:/go/src/net/http/server.go:1361 +0xc05
created by net/http.(*Server).Serve
    c:/go/src/net/http/server.go:1910 +0x343

login.gptl it's in the same folder of source code file
  • 写回答

2条回答 默认 最新

  • douba6361 2015-10-18 11:08
    关注

    Always handle your errors

     t, _ := template.ParseFiles("login.gtpl")
    

    What if this fails? Then t is nil and you get the same error

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用