使用HTTP 500状态

时间:2015-06-18 09:28:00

标签: go

有没有办法在Go中使用自定义状态代码通过HTTP提供静态文件(不重写大量私有代码)?

从我所看到的:

  1. http.ServeFile调用辅助函数http.serveFile
  2. 然后在确定文件/目录的mod时间和大小(如果存在)后调用http.ServeContent
  3. 最后,调用http.serveContent,设置正确的标头(内容类型,内容长度)并设置http.StatusOK标头here
  4. 我想我已经知道了答案,但如果有人有替代解决方案,那就很有用。

    该用例正在服务500.html,404.html等。 al文件。我通常使用nginx来捕获Go的普通普通http.Error响应,并让nginx在磁盘上提供文件,但是我在一个不能选择的环境中。

1 个答案:

答案 0 :(得分:7)

换行http.ResponseWriter

type MyResponseWriter struct {
    http.ResponseWriter
    code int
}

func (m MyResponseWriter) WriteHeader(int) {
    m.ResponseWriter.WriteHeader(m.code)
}

然后(对于HTTP 500):

http.ServeFile(MyResponseWriter{rw, 500}, rq, "file.name")

rw是"实际" http.ResponseWriterrq*http.Request对象。