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

betterwr

package module
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Aug 6, 2026 License: MIT Imports: 3 Imported by: 0

README

betterwr | http.ResponseWriter 与 *http.Request 的轻量封装

提供快捷的 JSON / 文本读写

封装了标准库 net/http 的读写操作, 仅此而已

开始使用

go get github.com/UnknownMp391/betterwr

要求 Go 1.22+

特性

文本读写

ReadText() 使用 io.ReadAll 读取请求体, 读取后自动关闭 Request.Body; WriteText(s) 写入文本并自动设置 Content-Type: text/plain

func textHandler(w http.ResponseWriter, r *http.Request) {
	ctx := betterwr.BetterWR{ResponseWriter: w, Request: r}

	s, err := ctx.ReadText()
	if err != nil {
		http.Error(w, err.Error(), http.StatusBadRequest)
		return
	}

	ctx.WriteText("Hello " + s)
}
JSON 读写

ReadJson(&v) 使用 json.NewDecoder 解码请求体, 读取后自动关闭 Request.Body; WriteJson(v) 使用 json.NewEncoder 编码响应并自动设置 Content-Type: application/json

type CreateUserReq struct {
	Name string `json:"name"`
}

type CreateUserResp struct {
	Name string `json:"name"`
	Id   int    `json:"id"`
}

func jsonHandler(w http.ResponseWriter, r *http.Request) {
	ctx := betterwr.BetterWR{ResponseWriter: w, Request: r}

	req := CreateUserReq{}
	if err := ctx.ReadJson(&req); err != nil {
		http.Error(w, err.Error(), http.StatusBadRequest)
		return
	}

	ctx.WriteJson(&CreateUserResp{Id: 1, Name: req.Name})
}
其他

Header() 返回响应头, WriteStatus(code) 写入状态码, WriteBytes(b) 写入字节数据

func bytesHandler(w http.ResponseWriter, r *http.Request) {
	ctx := betterwr.BetterWR{ResponseWriter: w, Request: r}

	ctx.Header().Set("X-Server", "betterwr")
	ctx.WriteBytes([]byte("hello"))
}

func noContentHandler(w http.ResponseWriter, r *http.Request) {
	ctx := betterwr.BetterWR{ResponseWriter: w, Request: r}
	ctx.WriteStatus(http.StatusNoContent)
}
使用方法

在任意 handler 中直接构造 BetterWR{ResponseWriter: w, Request: r} 即可使用

package main

import (
	"log"
	"net/http"

	"github.com/UnknownMp391/betterwr"
)

func hello(w http.ResponseWriter, r *http.Request) {
	ctx := betterwr.BetterWR{ResponseWriter: w, Request: r}

	name := r.URL.Query().Get("name")
	if name == "" {
		name = "world"
	}
	ctx.WriteText("Hello, " + name + "!")
}

func main() {
	http.HandleFunc("/hello", hello)
	log.Fatal(http.ListenAndServe(":8080", nil))
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type BetterWR

type BetterWR struct {
	// ResponseWriter 用于写入响应
	ResponseWriter http.ResponseWriter
	// Request 是当前请求, ReadJson 与 ReadText 会读取并关闭其 Body
	Request *http.Request
}

BetterWR 是 http.ResponseWriter 与 *http.Request 的轻量封装, 提供快捷的 JSON / 文本读写方法

func (*BetterWR) Header

func (ctx *BetterWR) Header() http.Header

Header 返回响应头

func (*BetterWR) ReadJson

func (ctx *BetterWR) ReadJson(s any) error

ReadJson 使用 json.NewDecoder 将请求体解码到 s 读取结束后会 defer 关闭 Request.Body

func (*BetterWR) ReadText

func (ctx *BetterWR) ReadText() (string, error)

ReadText 使用 io.ReadAll 读取请求体并返回字符串 读取结束后会 defer 关闭 Request.Body

func (*BetterWR) WriteBytes

func (ctx *BetterWR) WriteBytes(b []byte) error

WriteBytes 写入原始字节数据

func (*BetterWR) WriteJson

func (ctx *BetterWR) WriteJson(s any) error

WriteJson 使用 json.NewEncoder 将 s 编码为 JSON 写入响应, 并自动设置 Content-Type: application/json

func (*BetterWR) WriteStatus

func (ctx *BetterWR) WriteStatus(code int)

WriteStatus 写入 HTTP 状态码

func (*BetterWR) WriteText

func (ctx *BetterWR) WriteText(s string) error

WriteText 写入文本, 并自动设置 Content-Type: text/plain

Jump to

Keyboard shortcuts

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