response_writer.go 911 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package gin
  2. import (
  3. "log"
  4. "net/http"
  5. )
  6. type (
  7. ResponseWriter interface {
  8. http.ResponseWriter
  9. Status() int
  10. Written() bool
  11. WriteHeaderNow()
  12. }
  13. responseWriter struct {
  14. http.ResponseWriter
  15. status int
  16. written bool
  17. }
  18. )
  19. func (w *responseWriter) reset(writer http.ResponseWriter) {
  20. w.ResponseWriter = writer
  21. w.status = 200
  22. w.written = false
  23. }
  24. func (w *responseWriter) WriteHeader(code int) {
  25. if code != 0 {
  26. w.status = code
  27. if w.written {
  28. log.Println("[GIN] WARNING. Headers were already written!")
  29. }
  30. }
  31. }
  32. func (w *responseWriter) WriteHeaderNow() {
  33. if !w.written {
  34. w.written = true
  35. w.ResponseWriter.WriteHeader(w.status)
  36. }
  37. }
  38. func (w *responseWriter) Write(data []byte) (n int, err error) {
  39. w.WriteHeaderNow()
  40. return w.ResponseWriter.Write(data)
  41. }
  42. func (w *responseWriter) Status() int {
  43. return w.status
  44. }
  45. func (w *responseWriter) Written() bool {
  46. return w.written
  47. }