buffer

package
v1.67.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 27, 2026 License: MIT Imports: 4 Imported by: 0

README

Package buffer

Пакет buffer предоставляет инструменты для буферизации HTTP-запросов и ответов. Используется в middleware для логирования, метрик и других задач, требующих доступа к телам запросов и ответов без их модификации.

Types

Buffer

Структура для перехвата и буферизации данных HTTP-ответа. Реализует интерфейс http.ResponseWriter.

Methods:

New() *Buffer

Конструктор буфера. Инициализирует внутренние буферы для тела запроса и ответа.

(m *Buffer) Reset(w http.ResponseWriter)

Сбрасывает состояние буфера и привязывает его к новому http.ResponseWriter.

(m *Buffer) Write(b []byte) (int, error)

Перехватывает данные, записываемые в ответ, и сохраняет их в буфер.

(m *Buffer) WriteHeader(statusCode int)

Фиксирует статус-код ответа.

(m *Buffer) ResponseBody() []byte

Возвращает тело ответа в виде байтов из буфера.

(m *Buffer) RequestBody() []byte

Возвращает тело запроса в виде байтов из буфера.

(m *Buffer) ReadRequestBody(r io.Reader) error

Читает тело запроса и сохраняет его в буфер.

(m *Buffer) StatusCode() int

Возвращает статус-код ответа. Если статус-код не был еще записан, вернется 200 OK.

Functions

Acquire(w http.ResponseWriter) *Buffer

Берет буфер из пула и инициализирует его для работы с указанным http.ResponseWriter.

Release(w *Buffer)

Возвращает буфер в пул для повторного использования.

Usage

Default usage flow
package main

import (
	"log"
	"net/http"

	"github.com/txix-open/isp-kit/http/endpoint/buffer"
)

func LoggingMiddleware(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		/* get buffer from pool */
		buf := buffer.Acquire(w)
		defer buffer.Release(buf)

		/* read request body */
		_ = buf.ReadRequestBody(r.Body)
		r.Body = buffer.NewRequestBody(buf.RequestBody())

		next.ServeHTTP(buf, r)

		/* log response body */
		responseBody := buf.ResponseBody()
		log.Printf("Response: %s\n", responseBody)
	})
}

Documentation

Overview

Package buffer provides a ResponseWriter wrapper that buffers request and response bodies. It is used for logging and metrics collection in HTTP middleware.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Release

func Release(w *Buffer)

Release returns a Buffer to the pool for reuse. It should be called after the Buffer is no longer needed.

Types

type Buffer

type Buffer struct {
	http.ResponseWriter
	// contains filtered or unexported fields
}

Buffer wraps http.ResponseWriter to capture request and response bodies. It is commonly used in middleware for logging and metrics collection.

func Acquire

func Acquire(w http.ResponseWriter) *Buffer

Acquire retrieves a Buffer from the pool and initializes it with the given ResponseWriter. It is safe for concurrent use and should be paired with Release.

func New

func New() *Buffer

New creates a new Buffer with initialized request and response buffers.

func (*Buffer) ReadRequestBody

func (m *Buffer) ReadRequestBody(r io.Reader) error

ReadRequestBody reads the entire request body into the buffer. It returns an error if the read operation fails.

func (*Buffer) RequestBody

func (m *Buffer) RequestBody() []byte

RequestBody returns the captured request body as a byte slice.

func (*Buffer) Reset

func (m *Buffer) Reset(w http.ResponseWriter)

Reset reinitializes the buffer with a new ResponseWriter and clears internal state. It should be called before reusing a pooled Buffer.

func (*Buffer) ResponseBody

func (m *Buffer) ResponseBody() []byte

ResponseBody returns the captured response body as a byte slice.

func (*Buffer) StatusCode

func (m *Buffer) StatusCode() int

StatusCode returns the captured status code, or http.StatusOK if not set.

func (*Buffer) Write

func (m *Buffer) Write(b []byte) (int, error)

Write writes data to both the underlying ResponseWriter and the response buffer. It returns the number of bytes written and any error encountered.

func (*Buffer) WriteHeader

func (m *Buffer) WriteHeader(statusCode int)

WriteHeader captures the status code and delegates to the underlying ResponseWriter.

type RequestBody

type RequestBody struct {
	// contains filtered or unexported fields
}

RequestBody wraps a bytes.Buffer to provide an io.ReadCloser for request body replay. It is used when the request body needs to be read multiple times (e.g., for logging).

func NewRequestBody

func NewRequestBody(body []byte) RequestBody

NewRequestBody creates a new RequestBody from a byte slice.

func (RequestBody) Close

func (r RequestBody) Close() error

Close is a no-op to satisfy the io.ReadCloser interface.

func (RequestBody) Read

func (r RequestBody) Read(p []byte) (n int, err error)

Read reads data from the underlying buffer into p. It returns the number of bytes read and any error encountered.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL