Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 去紧急服务_Http_Templates_Web_Go_Panic - Fatal编程技术网

Http 去紧急服务

Http 去紧急服务,http,templates,web,go,panic,Http,Templates,Web,Go,Panic,我感到恐慌: C:\Users\loow\Desktop\USBWebserver v8.5\duplicate_submissions>go run server.go 2015/10/23 13:00:39 http: panic serving [::1]:63867: runtime error: invalid memo ry address or nil pointer dereference goroutine 5 [running]: net/http.(*conn).se

我感到恐慌:

C:\Users\loow\Desktop\USBWebserver v8.5\duplicate_submissions>go run server.go
2015/10/23 13:00:39 http: panic serving [::1]:63867: runtime error: invalid memo
ry address or nil pointer dereference
goroutine 5 [running]:
net/http.(*conn).serve.func1(0xc0820a1810, 0x3b55b8, 0xc082024040)
        c:/go/src/net/http/server.go:1287 +0xbc
main.login(0x2990058, 0xc0820d4000, 0xc0820be1c0)
        C:/Users/loow/Desktop/USBWebserver v8.5/duplicate_submissions/server.go:
27 +0x5a5
net/http.HandlerFunc.ServeHTTP(0x8326a8, 0x2990058, 0xc0820d4000, 0xc0820be1c0)
        c:/go/src/net/http/server.go:1422 +0x41
net/http.(*ServeMux).ServeHTTP(0xc082062360, 0x2990058, 0xc0820d4000, 0xc0820be1
c0)
        c:/go/src/net/http/server.go:1699 +0x184
net/http.serverHandler.ServeHTTP(0xc08200c360, 0x2990058, 0xc0820d4000, 0xc0820b
e1c0)
        c:/go/src/net/http/server.go:1862 +0x1a5
net/http.(*conn).serve(0xc0820a1810)
        c:/go/src/net/http/server.go:1361 +0xbf5
created by net/http.(*Server).Serve
        c:/go/src/net/http/server.go:1910 +0x3fd
2015/10/23 13:00:39 http: panic serving [::1]:63868: runtime error: invalid memo
ry address or nil pointer dereference
goroutine 33 [running]:
net/http.(*conn).serve.func1(0xc082114000, 0x3b55b8, 0xc082112000)
        c:/go/src/net/http/server.go:1287 +0xbc
main.login(0x2990058, 0xc0821140b0, 0xc0821200e0)
        C:/Users/loow/Desktop/USBWebserver v8.5/duplicate_submissions/server.go:
27 +0x5a5
net/http.HandlerFunc.ServeHTTP(0x8326a8, 0x2990058, 0xc0821140b0, 0xc0821200e0)
        c:/go/src/net/http/server.go:1422 +0x41
net/http.(*ServeMux).ServeHTTP(0xc082062360, 0x2990058, 0xc0821140b0, 0xc0821200
e0)
        c:/go/src/net/http/server.go:1699 +0x184
net/http.serverHandler.ServeHTTP(0xc08200c360, 0x2990058, 0xc0821140b0, 0xc08212
00e0)
        c:/go/src/net/http/server.go:1862 +0x1a5
net/http.(*conn).serve(0xc082114000)
        c:/go/src/net/http/server.go:1361 +0xbf5
created by net/http.(*Server).Serve
        c:/go/src/net/http/server.go:1910 +0x3fd
exit status 2
使用此代码:

package main

import(
    "fmt"
    "net/http"
    "html/template"
    "log"
    "time"
    "crypto/md5"
    "io"
    "strconv"
)

func loginForm(w http.ResponseWriter, r *http.Request){

}

func login(w http.ResponseWriter, r *http.Request){
    fmt.Println(r.Method)
    if r.Method == "GET"{
        cruTime := time.Now().Unix()
        h := md5.New()
        io.WriteString(h,strconv.FormatInt(cruTime,10))
        token := fmt.Sprintf("%x", h.Sum(nil))
        fmt.Println(token)
        t, err := template.ParseFiles("templates/index.gtpl")
        fmt.Println(err.Error())
        err = t.Execute(w, token)
        fmt.Println(err.Error())
    } else{
        r.ParseForm()
        token := r.Form.Get("token")
        if token != ""{
            fmt.Println(token)
        } else{
            fmt.Println("There is no token")
        }
        fmt.Println("username length: ", len(r.Form["username"][0]))
        fmt.Println("username: ", template.HTMLEscapeString(r.Form.Get("username")))
        fmt.Println("password: ", template.HTMLEscapeString(r.Form.Get("password")))
        template.HTMLEscape(w, []byte(r.Form.Get("username")))

    }
}

func main(){
    http.HandleFunc("/", loginForm)
    http.HandleFunc("/login", login)
    err := http.ListenAndServe(":9090", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}
我无法修复它,我尝试了在stackoverflow中找到的所有东西。有什么问题?没有错误,恐慌者说t中的问题,err:=template.ParseFiles(“templates/index.gtpl”)

有一个模板文件:

<input type="checkbox" name="interest" value="football">Football
<input type="checkbox" name="interest" value="basketball">Basketball
<input type="checkbox" name="interest" value="tennis">Tennis
Username: <input type="text" name="username">
Password: <input type="password" name="password">
<input type="hidden" name="token" value="{{.}}">
<input type="submit" value="Login">
足球
篮球
网球
用户名:
密码:

紧急堆栈跟踪为您提供以下信息:

2015/10/23 13:00:39 http: panic serving [::1]:63868: runtime error: invalid memory address or nil pointer dereference goroutine 33 [running]:
这意味着您试图访问不存在的内容(nil指针)

那么文件中的第一行是:

v8.5/duplicate_submissions/server.go:27
这就是:

26: t, err := template.ParseFiles("templates/index.gtpl")
27: fmt.Println(err.Error())
28: err = t.Execute(w, token)
这意味着错误为零

解决方案

如果出现错误,则无法继续此过程。这就是为什么不能直接打印错误的原因。为了优雅地停止进程,需要返回HTTP状态码,然后返回。对于上述情况,您可以返回代码500(内部服务器错误)

对于template.ParseFiles和t.Execute也必须这样做


顺便说一下,这被称为“逗号确定”模式。紧急堆栈跟踪为您提供以下信息:

2015/10/23 13:00:39 http: panic serving [::1]:63868: runtime error: invalid memory address or nil pointer dereference goroutine 33 [running]:
这意味着您试图访问不存在的内容(nil指针)

那么文件中的第一行是:

v8.5/duplicate_submissions/server.go:27
这就是:

26: t, err := template.ParseFiles("templates/index.gtpl")
27: fmt.Println(err.Error())
28: err = t.Execute(w, token)
这意味着错误为零

解决方案

如果出现错误,则无法继续此过程。这就是为什么不能直接打印错误的原因。为了优雅地停止进程,需要返回HTTP状态码,然后返回。对于上述情况,您可以返回代码500(内部服务器错误)

对于template.ParseFiles和t.Execute也必须这样做


顺便说一句,这就是所谓的“逗号确定”模式,你调用的是
err.Error()
,而没有检查
err
是否为
nil
。是的,但我只是尝试修复错误,如果我删除它,恐慌仍然存在。删除err.Error(),然后重试。如果
err
nil
,你调用的是空指针上的方法,这会导致segfault。对
nil
值调用方法。这是一种恐慌的方法,因为它试图访问一些不可访问的字符串。您正在调用
err.Error()
,但没有检查
err
是否为
nil
。是的,但我只是尝试修复错误,如果我删除它,恐慌仍然存在。删除err.Error(),然后重试。如果
err
nil
,则,您正在对空指针调用方法,这将导致segfault。对
nil
值调用方法。这个方法之所以会惊慌失措,是因为它试图访问一些无法访问的字符串。@DaveC很好。它是fixed@DaveC抢手货已经修好了