gpt4 book ai didi

web - 如何在golang web中gzip一个模板

转载 作者:IT王子 更新时间:2023-10-29 02:13:08 25 4
gpt4 key购买 nike

我已经设置了contest-encoding的值,但是我怎么gzip这个模板,因为文件还是很大。

func indexPageHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Encoding", "gzip")
r.Header.Set("Accept-Encoding", "gzip")
tmpl, err := template.New("index.html").ParseGlob("./templates/*")
if err != nil {
log.Println(err)
return
}
err = tmpl.Execute(w, nil)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}

有什么函数可以gzip响应吗?]

按照建议,我将代码更改为:

func indexPageHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Encoding", "gzip")
r.Header.Set("Accept-Encoding", "gzip")
gz := gzip.NewWriter(w)
defer gz.Close()
tmpl, err := template.New("index.html").ParseGlob("./templates/*")
if err != nil {
log.Println(err)
return
}
err = tmpl.Execute(gz, nil)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}

但是当我查询 url 时,我只下载了 gzip 文件。有什么问题吗?

最佳答案

您可以使用包 compress/gzip :

func NewWriter(w io.Writer) *Writer

NewWriter returns a new Writer.
Writes to the returned writer are compressed and written to w.

It is the caller's responsibility to call Close on the WriteCloser
when done. Writes may be buffered and not flushed until Close.

在您的代码中,它可能看起来像这样:

gz := gzip.NewWriter(w)
defer gz.Close()

err = tmpl.Execute(gz, nil)
if err != nil {
http.Error(gz, err.Error(), http.StatusInternalServerError)
return
}

附上

您可能需要检查请求中的 Accept-Encoding header ,以查看浏览器是否接受 gzip 编码的内容。

关于web - 如何在golang web中gzip一个模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39844866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com