首页 存档 技术 查看内容

Go开发HTTP(下)

2018-3-30 13:00 |来自: 互联网 322 0

摘要: ResponseWriter http.ResponseWriter 是一个接口,你可以根据接口,添加一些自己需要的行为: type ResponseWriter inte**ce { Header() Header // 添加返回头信息 Write(byte) (int, error) // 添加返回的内容 ...

ResponseWriter

http.ResponseWriter 是一个接口,你可以根据接口,添加一些自己需要的行为:

type ResponseWriter inte**ce {

Header() Header // 添加返回头信息

Write([]byte) (int, error) // 添加返回的内容

WriteHeader(int) // 设置返回的状态码

}

w.WriteHeader() 是一次性的,不能重复设置状态码,否则会有提示信息:

func HttpHandle(w http.ResponseWriter, r *http.Request) {

w.WriteHeader(200) // 设置成功

w.WriteHeader(404) // 提示:http: multiple response.WriteHeader calls

w.WriteHeader(503) // 提示:http: multiple response.WriteHeader calls

}

而且需要在 w.Write() 之前设置 w.WriteHeader(),否则是 200。(要先发送状态码,再发送内容)

func HttpHandle(w http.ResponseWriter, r *http.Request) {

w.Write([]byte("Hello World"))

w.WriteHeader(404) // 提示:http: multiple response.WriteHeader calls,因为 w.Write() 已发布 HTTP 200

}

http.ResponseWriter 接口过于简单,实际使用会自己实现 ResponseWriter 来使用,比如获取返回的内容:

type MyResponseWriter struct {

http.ResponseWriter

bodyBytes *bytes.Buffer

}

// 覆写 http.ResponseWriter 的方法

func (mrw MyResponseWriter) Write(body []byte) (int, error) {

mrw.bodyBytes.Write(body) // 记录下返回的内容

return mrw.ResponseWriter.Write(body)

}

// Body 获取返回的内容,这个是自己添加的方法

func (mrw MyResponseWriter) Body() []byte {

return mrw.bodyBytes.Bytes()

}

func HttpHandle(w http.ResponseWriter, r *http.Request) {

m := MyResponseWriter{

ResponseWriter: w,

bodyBytes: bytes.NewBuffer(nil),

}

m.Header().Add("Content-Type", "text/html") // 要输出HTML记得加头信息

m.Write([]byte("

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部