3 回答

TA貢獻2080條經(jīng)驗 獲得超4個贊
bytes.Buffer有一個Bytes方法,因此您實際上不需要調(diào)用String并將其轉(zhuǎn)換為[]byte:
w.Write(buf.Bytes())
此外,將錯誤寫入 stderr 是一種很好的做法。只需將您的替換fmt為log:
if err != nil {
log.Println(err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}

TA貢獻1880條經(jīng)驗 獲得超4個贊
bytes.Buffer有一個內(nèi)置的方法來寫出一個io.Writer:
func get_handler(w http.ResponseWriter, r *http.Request) {
buf := new(bytes.Buffer)
//fill buffer
_,err := buf.WriteTo(w)
if err != nil {
log.Println(err)
}
}
文檔:http : //golang.org/pkg/bytes/#Buffer.WriteTo

TA貢獻1844條經(jīng)驗 獲得超8個贊
您可以bytes.Buffer通過寫入“原樣”來使用它,但代價是在每個請求上都丟棄緩沖區(qū)。
使用池化方法(在使用之間安全地重置內(nèi)容,但保留緩沖區(qū))可以獲得一些收益:
var bufPool *bpool.BufferPool
func YourHandler(w http.ResponseWriter, r *http.Request) {
buf := bufPool.Get()
defer bufPool.Put(buf)
err := template.ExecuteTemplate(buf, "forms/create.html", user)
// or err := json.NewEncoder(buf).Encode(value)
if err != nil {
return err
}
buf.WriteTo(w)
}
這使用bpool庫。
- 3 回答
- 0 關(guān)注
- 209 瀏覽
添加回答
舉報