go loadPage проблема: недопустимый адрес памяти или разыменование нулевого указателя

Я следую за golang.org учебник по созданию вики-страницы ( https://golang.org/doc/articles/wiki/#tmp_4 ) и все идет хорошо, пока я не получил вышеупомянутое сообщение об ошибке во время шага «использование net/http для обслуживания вики-страниц». У меня есть сообщение.txt файл в src/github.com/user/gowiki/test.txt но loadPage (title), похоже, не имеет доступа к тесту.txt-файл. Любая помощь очень ценится. Спасибо!

   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)
}
Метки

1 ответ

  1. Вы не проверяете ошибку, возвращаемую loadPage () в viewHandler (), поэтому, если loadPage () не может загрузить файл и возвращает nil с ошибкой, viewHandler () пытается использовать этот nil для получения заголовка и тела страницы, и это вызывает панику.

    Он работает нормально, если loadPage() может прочитать файл.