由于好评如潮,我最近从golang net / http转到fasthttp。
如您所知,fasthttp不使用(w http.ResponseWriter)但只使用一种语法(ctx * fasthttp.RequestCtx)。
我尝试过使用ctx.Write,但它没有用。
那么,如何在下面的代码中实现http.ResponseWriter来执行我的html模板?还请给出一些解释,以便我们都能受益。
非常感谢您的帮助!
package main()
import (
"html/template"
"fmt"
"github.com/valyala/fasthttp"
)
type PageData struct {
Title string
}
func init() {
tpl = template.Must(template.ParseGlob("public/templates/*.html"))
}
m := func(ctx *fasthttp.RequestCtx) {
switch string(ctx.Path()) {
case "/":
idx(ctx)
default:
ctx.Error("not found", fasthttp.StatusNotFound)
}
}
fasthttp.ListenAndServe(":8081", m)
}
func idx(ctx *fasthttp.RequestCtx) {
pd := new(PageData)
pd.Title = "Index Page"
err := tpl.ExecuteTemplate(ctx.write, "index.html", pd)
if err != nil {
log.Println("LOGGED", err)
http.Error(ctx.write, "Internal server error", http.StatusInternalServerError)
return
}
}
答案 0 :(得分:3)
*fasthttp.RequestCtx
实现io.Writer
界面(这就是ctx.Write()
存在的原因),这意味着您只需将ctx
作为参数传递给ExecuteTemplate()
:< / p>
tpl.ExecuteTemplate(ctx, "index.html", pd)
此外,http.Error()
来电无效,因为RequestCtx
不是http.ResponseWriter
。请改用RequestCtx
的{{3}}:
ctx.Error("Internal server error", http.StatusInternalServerError)