无法成功实现http.Handler

时间:2018-11-24 04:03:35

标签: http templates go webserver

我正在尝试编译以下代码。我无法成功实现自己的模板处理程序struct,导致构建时出现以下错误。

错误:

./ main.go:28:46:无法在http.Handle的参数中使用templateHandler文字(类型* templateHandler)作为http.Handler类型:     * templateHandler没有实现http.Handler(缺少ServeHTTP方法)

package main

import (
    "html/template"
    "log"
    "net/http"
    "path/filepath"
    "sync"
)

// templ represents a single template

type templateHandler struct {
    once     sync.Once
    filename string
    templ    *template.Template
}

// ServeHTTP handles the HTTP request.
func (t *templateHandler) ServerHTTP(w http.ResponseWriter, r *http.Request) {
    t.once.Do(func() {
        t.templ = template.Must(template.ParseFiles(filepath.Join("templates", t.filename)))
})
    t.templ.Execute(w, nil)
}

func main() {
    http.Handle("/", &templateHandler{filename: "chat.html"})
    // Start Web Server
    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatal("ListenAndServe:", err)
    }
}

1 个答案:

答案 0 :(得分:2)

接口具有以下表示形式。

type Handler interface {
    ServeHTTP(ResponseWriter, *Request)
}

您的名字拼写错误。 ServerHTTP / ServeHTTP。