Help us shape the future of Go! Take the 2026 Go Developer Survey

buffer

package
v1.63.1 Latest Latest
Warning

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

Go to latest
Published: Nov 18, 2025 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

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Release

func Release(w *Buffer)

Types

type Buffer

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

func Acquire

func Acquire(w http.ResponseWriter) *Buffer

func New

func New() *Buffer

func (*Buffer) ReadRequestBody

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

func (*Buffer) RequestBody

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

func (*Buffer) Reset

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

func (*Buffer) ResponseBody

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

func (*Buffer) StatusCode

func (m *Buffer) StatusCode() int

func (*Buffer) Write

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

func (*Buffer) WriteHeader

func (m *Buffer) WriteHeader(statusCode int)

type RequestBody

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

func NewRequestBody

func NewRequestBody(body []byte) RequestBody

func (RequestBody) Close

func (r RequestBody) Close() error

func (RequestBody) Read

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

nolint:nonamedreturns

Jump to

Keyboard shortcuts

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