Documentation
¶
Overview ¶
Package render 提供业务特定的 hertz Render interface 实现,与 hertz 官方 render 子包(https://www.cloudwego.io/zh/docs/hertz/tutorials/basic-feature/render/) 风格一致。业务在 handler 调 ctx.Render(code, hertzrender.JSONRPC{...}) 即可。
官方依据:https://www.cloudwego.io/zh/docs/hertz/tutorials/basic-feature/render/ 锚点"自定义渲染"段:
type Render interface {
Render(resp *protocol.Response) error
WriteContentType(resp *protocol.Response)
}
官方 JSON/XML/HTML Render 在 hertz-contrib,hertz-render 子包内置;本包 补全业务特定协议(JSON-RPC 2.0 / MessagePack / CSV),ekit 仓库 0 业务 假设(纯类型 + 编码)。
Index ¶
Constants ¶
const JSONRPCVersion = "2.0"
JSONRPCVersion 是 JSON-RPC 2.0 协议版本号常量,业务可不显式指定 Version。
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CSV ¶
type CSV struct {
Rows [][]string
}
CSV 用 encoding/csv 标准库序列化表格数据。Rows 第一行通常是表头。 业务可直接给 `[][]string`;若想给 `[]any` / `[]struct`,在 NewCSV 时 调 convertFields() 预转。
用法:
ctx.Render(200, hertzrender.CSV{Rows: [][]string{
{"name", "age"},
{"alice", "30"},
}})
官方依据:https://www.cloudwego.io/zh/docs/hertz/tutorials/basic-feature/render/ 自定义渲染段,encoding/csv 标准库文档 https://pkg.go.dev/encoding/csv。
func NewCSVFromAny ¶
NewCSVFromAny 把 `[]any` 类型的行(每行是 struct 或 `[]any` 字段)转成 `[][]string`,自动 strconv 格式化基础类型。复杂类型(struct/map)走 fmt.Sprintf("%v", v) 兜底。
典型用法(把 gorm 查询结果直接转 CSV):
rows := []any{user1, user2}
ctx.Render(200, hertzrender.NewCSVFromAny(rows))
func (CSV) WriteContentType ¶
WriteContentType 实现 render.Render interface。
type JSONRPC ¶
type JSONRPC struct {
Version string
Result any
Error *JSONRPCError
ID any
}
JSONRPC 是 JSON-RPC 2.0 响应包装。Result 与 Error 互斥:成功时 Result 非 nil,Error 为 nil;失败时 Error 非 nil,Result 为 nil。
用法:
ctx.Render(200, hertzrender.JSONRPC{
Result: map[string]any{"pong": true},
ID: 1,
})
或错误响应:
ctx.Render(200, hertzrender.JSONRPC{
Error: &hertzrender.JSONRPCError{Code: -32601, Message: "Method not found"},
ID: 1,
})
func (JSONRPC) WriteContentType ¶
WriteContentType 实现 render.Render interface。
type JSONRPCError ¶
type JSONRPCError struct {
Code int `json:"code"`
Message string `json:"message"`
Data any `json:"data,omitempty"`
}
JSONRPCError 描述 JSON-RPC 2.0 错误对象。Code 必须是整数,Message 是 人类可读描述,Data 是可选的额外上下文。详细见 JSON-RPC 2.0 spec (https://www.jsonrpc.org/specification)。
type MessagePack ¶
type MessagePack struct {
Data any
}
MessagePack 用 MessagePack 二进制编码响应体。业务给 Data(任意 Go 值),自动 msgpack 编码 + 写入 resp。
用法:
ctx.Render(200, hertzrender.MessagePack{Data: payload})
优势:二进制编码体积比 JSON 小 30%~50%,适合 IoT / 移动端弱网场景。
官方依据:https://github.com/vmihailenco/msgpack(v5 Go 实现)。
func (MessagePack) Render ¶
func (r MessagePack) Render(resp *protocol.Response) error
Render 实现 render.Render interface。
func (MessagePack) WriteContentType ¶
func (r MessagePack) WriteContentType(resp *protocol.Response)
WriteContentType 实现 render.Render interface。