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))
}