我正在尝试编译以下代码。我无法成功实现自己的模板处理程序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)
    }
}

最佳答案

接口(interface)具有以下表示形式。

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

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

07-25 20:13