2016-12-28 15 views
0

golang.orgチュートリアルのwikiページ(https://golang.org/doc/articles/wiki/#tmp_4)の作成に従っていますが、上記のエラーメッセージが表示されるまではすべて " wikiページを提供するためのhttp "を参照してください。 src/github.com/user/gowiki/test.txtにtext.txtファイルがありますが、loadPage(title)はtest.txtファイルにアクセスしていないようです。どんな助けでも大歓迎です。ありがとう!go loadPage発行:無効なメモリアドレスまたはnilポインタの逆参照

package main 

import (
    "fmt" 
    "io/ioutil" 
    "net/http" 
) 

type Page struct { 
    Title string 
    Body []byte 
} 

func (p *Page) save() error { 
    filename := p.Title + ".txt" 
    return ioutil.WriteFile(filename, p.Body, 0600) 
} 

func loadPage(title string) (*Page, error) { 
    filename := title + ".txt" 
    body, err := ioutil.ReadFile(filename) 
    if err != nil { 
     return nil, err 
    } 
    return &Page{Title: title, Body: body}, nil 
} 

func viewHandler(w http.ResponseWriter, r *http.Request) { 
    title := r.URL.Path[len("/view/"):] 
    p, _ := loadPage(title) 
    fmt.Fprintf(w, "<h1>%s</h1><div>%s</div>", p.Title, p.Body) 
} 

func main() { 
    http.HandleFunc("/view/", viewHandler) 
    http.ListenAndServe(":8080", nil) 
} 

答えて

0

あなたはのViewHandler(中loadPage()によって返されたエラーをチェックしていない)ので、loadPage()は、ファイルをロードすることはできませんし、リターンがエラーでnilをすれば、のViewHandlerは、()を取得することnilを使用しようとしますページのタイトルと本文、それがパニックの原因です。

ただし、loadPage()がファイルを読み取ることができればうまく動作します。

+0

エラーがあった場合に返すif文を作成し、loadPage()がファイルを見つけることができないことを確認するために "open test.txt:no such file or directory"を表示するようにエラーを出力しました。私はファイルがどこに保存されているのか、どこからサーバーを起動したのか、それは今ロードします。ありがとう! – jj1111

+0

@ jj1111よろしくお願いします。あなたがそれに満足すれば私の答えを受け入れるべきです。 –

関連する問題