使用bytes.Buffer,然后将其包装为散列,例如:
type HashedBuffer struct { h hash.Hash b bytes.Buffer}func NewHashedBuffer(h hash.Hash) *HashedBuffer { return &HashedBuffer{h: h}}func (h *HashedBuffer) Write(p []byte) (n int, err error) { n, err = h.b.Write(p) h.h.Write(p) return}func (h *HashedBuffer) Output(w http.ResponseWriter) { w.Header().Set("ETag", hex.EnpreToString(h.h.Sum(nil))) h.b.WriteTo(w)}//handlerfunc Handler(w http.ResponseWriter, r *http.Request) { hb := NewHashedBuffer(sha256.New()) hb.Write([]byte("stuff")) hb.Output(w)}
截至目前,您无法设置预告片标头,这是一个未解决的问题。
有一种解决方法,劫持连接(来自上述问题):
// TODO: There's no way yet for the server to set trailers// without hijacking, so do that for now, just to test the client.// Later, in Go 1.4, it should be be implicit that any mutations// to w.Header() after the initial write are the trailers to be// sent, if and only if they were previously declared with// w.Header().Set("Trailer", ..keys..)w.(Flusher).Flush()conn, buf, _ := w.(Hijacker).Hijack()t := Header{}t.Set("Server-Trailer-A", "valuea")t.Set("Server-Trailer-C", "valuec") // skipping Bbuf.WriteString("0rn") // eoft.Write(buf)buf.WriteString("rn") // end of trailersbuf.Flush()conn.Close()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)