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

render

package
v0.8.8 Latest Latest
Warning

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

Go to latest
Published: Oct 29, 2026 License: MIT Imports: 8 Imported by: 0

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

View Source
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

func NewCSVFromAny(rows []any) CSV

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

func (r CSV) Render(resp *protocol.Response) error

Render 实现 render.Render interface。

func (CSV) WriteContentType

func (r CSV) WriteContentType(resp *protocol.Response)

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

func (r JSONRPC) Render(resp *protocol.Response) error

Render 实现 render.Render interface。

func (JSONRPC) WriteContentType

func (r JSONRPC) WriteContentType(resp *protocol.Response)

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。

Jump to

Keyboard shortcuts

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