2017-10-08 9 views
0

誰かが何が起こっているのか説明できますか?私は行方不明のものがありますか?私は新しく行きます。私はシンプルなCRUDアプリケーションを作っていますが、コンパイルはOKですが、サーバーを起動するとランタイムエラーが発生します。panic serving [:: 1]:46738:ランタイムエラー:無効なメモリアドレスまたはnilポインタの参照解除

2017/10/08 11:11:59 http: multiple response.WriteHeader calls 
2017/10/08 11:11:59 http: panic serving [::1]:46828: runtime error: invalid memory address or nil pointer dereference 
goroutine 19 [running]: 
net/http.(*conn).serve.func1(0xc42008ce60) 
    /home/vikram/go/src/net/http/server.go:1697 +0xd0 
panic(0x740160, 0x97cc10) 
    /home/vikram/go/src/runtime/panic.go:491 +0x283 
html/template.(*Template).escape(0x0, 0x0, 0x0) 
    /home/vikram/go/src/html/template/template.go:95 +0x38 
html/template.(*Template).Execute(0x0, 0x94d920, 0xc420186000, 0x719e00, 0x9ab500, 0xc4201820c0, 0x0) 
    /home/vikram/go/src/html/template/template.go:119 +0x2f 
main.indexHandler(0x9519e0, 0xc420186000, 0xc420160100) 
    /home/vikram/Projects/golang/src/github.com/vikramdurai/blog-app-go/main.go:188 +0x185 
net/http.HandlerFunc.ServeHTTP(0x7b8da8, 0x9519e0, 0xc420186000, 0xc420160100) 
    /home/vikram/go/src/net/http/server.go:1918 +0x44 
net/http.(*ServeMux).ServeHTTP(0x98ad20, 0x9519e0, 0xc420186000, 0xc420160100) 
    /home/vikram/go/src/net/http/server.go:2254 +0x130 
net/http.serverHandler.ServeHTTP(0xc420087110, 0x9519e0, 0xc420186000, 0xc420160100) 
    /home/vikram/go/src/net/http/server.go:2619 +0xb4 
net/http.(*conn).serve(0xc42008ce60, 0x9520a0, 0xc42007c280) 
    /home/vikram/go/src/net/http/server.go:1801 +0x71d 
created by net/http.(*Server).Serve 
    /home/vikram/go/src/net/http/server.go:2720 +0x288 

main.goファイルがgithubです。

答えて

1

ParseFilesの呼び出しはnilとエラーを返します。 tはnilなので、t.Executeパニックの呼び出しです。

パニックを回避するには、http.Errorを呼び出した後にハンドラから戻ります。

... 
t, err := template.ParseFiles("index.html") 

if err != nil { 
    http.Error(w, err.Error(), http.StatusInternalServerError) 
    return 
} 
... 

可能な実装の詳細を含むエラーメッセージをクライアントに送信することはお勧めできません。私は以下を提案します:

... 
t, err := template.ParseFiles("index.html") 

if err != nil { 
    log.Println(err) 
    http.Error(w, "Internal server error", http.StatusInternalServerError) 
    return 
} 
... 
+0

私はdev環境であるためにエラーを送信しました。 *もちろん、私は生産上のエラー報告を削除します。しかし、答えをありがとう! :) –

関連する問題