# Packages
Package cbor [CBOR] 编码
[CBOR]: https://www.rfc-editor.org/rfc/rfc8949.html.
Package form 用于处理 www-form-urlencoded 编码
func read(ctx *web.Context) { vals := urls.Values{} ctx.Read(vals) }
func write(ctx *web.Context) { vals := urls.Values{} vals.Add("name", "caixw") return web.Object(http.StatusOK, vals, nil) }
# form 标签
用户可以通过定义 form 标签自定义输出的名称,比如:
type Username struct { Name string `form:"name"` Age int }
转换成 form-data 可能是以下样式:
name=jjj&age=18
该方式对数据类型有一定限制: - 如果是 map 类型,要求键名类型必须为 string; - 如果是 array 或是 slice,则要求元素类型必须是 go 的基本数据类型,不能是 struct 类型; - 其它基本类型或是实现了 [encoding.TextUnmarshaler] 和 [encoding.TextMarshaler] 接口的类型;
# 接口
对于复杂类型,用户可以自定义实现 [Marshaler] 和 [Unmarshaler] 接口进行编解码, 其功能与用户与 encoding/json 中的 Marshaler 和 Unmarshaler 接口相似。
与标准库中 http.Request.ParseForm 的不同点: - 标准库支持从查询参数中获取数据; - 当前包支持非 ascii 编码; - 当前包支持将数据映射到一个对象;.
Package gob [GOB] 格式的数据编码方案
[GOB]: https://pkg.go.dev/encoding/gob.
Package html 提供输出 HTML 内容的解码函数
srv := server.New("", "", &server.Options{ Codec: web.New().AddMimetype("text/html", html.Marshal, html.Unmarshal, "") })
html.Init(...) html.Install(...)
func handle(ctx *web.Context) Responser { obj := &struct{ XMLName struct{} `html:"Object"` Data string }{} return Object(200, obj, nil) }
预定义的模板
框架本身提供了一些数据类型的定义,比如 [web.Problem], 用户需要提供由 [web.Problem.MarshalHTML] 返回的模板定义。 如果用户还使用了 [server.RenderResponse],那么也需要提供对应的模板定义。.
Package json JSON 格式的序列化方法.
Package jsonp JSONP 序列化操作.
Package nop 提供了空的序列化方法.
Package sse [SSE] 的实现
[SSE]: https://html.spec.whatwg.org/multipage/server-sent-events.html.
Package xml XML 编码的序列化操作.
Package yaml 支持 YAML 编码的序列化操作.
# Functions
ErrUnsupported 返回不支持序列化的错误信息
此方法的返回对象同时也包含了 [errors.ErrUnsupported]
errors.Is(ErrUnsupported(), errors.ErrUnsupported) == true。.