go-openapi/swag

GitHub: go-openapi/swag

go-openapi/swag 是一个 Go 通用工具函数库,为 go-openapi 系列项目提供类型转换、JSON/YAML 处理、文件加载等横切关注点支持,也可独立使用。

Stars: 221 | Forks: 52

# Swag [![Tests](https://static.pigsec.cn/wp-content/uploads/repos/cas/db/dbc20fbb5b43d751115743b728bc221bb9cb0a7c6247701ddba81ac8c7acc81e.svg)][test-url] [![Coverage](https://codecov.io/gh/go-openapi/swag/branch/master/graph/badge.svg)][cov-url] [![CI vuln scan](https://static.pigsec.cn/wp-content/uploads/repos/cas/f3/f38b970f8dc114adca53ef9669122f3bf5a0a92b76f1cededc8e5af7f9b597c7.svg)][vuln-scan-url] [![CodeQL](https://static.pigsec.cn/wp-content/uploads/repos/cas/53/539e9a6bf48ad24469a4363bff3aa68124154549e26592783d3d8577f2acbbfc.svg)][codeql-url] [![Release](https://badge.fury.io/gh/go-openapi%2Fswag.svg)][release-url] [![Go Report Card](https://goreportcard.com/badge/github.com/go-openapi/swag)][gocard-url] [![CodeFactor Grade](https://img.shields.io/codefactor/grade/github/go-openapi/swag)][codefactor-url] [![License](http://img.shields.io/badge/license-Apache%20v2-orange.svg)][license-url] [![GoDoc](https://pkg.go.dev/badge/github.com/go-openapi/swag)][godoc-url] [![Discord Channel](https://img.shields.io/discord/1446918742398341256?logo=discord&label=discord&color=blue)][discord-url] [![go version](https://img.shields.io/github/go-mod/go-version/go-openapi/swag)][goversion-url] ![Top language](https://img.shields.io/github/languages/top/go-openapi/swag) ![Commits since latest release](https://img.shields.io/github/commits-since/go-openapi/swag/latest) 为 go-openapi 和 go-swagger 项目提供的一系列辅助函数。 你也可以在自己的项目中独立使用它。 * [目录](#contents) * [依赖](#dependencies) * [更新日志](#change-log) * [许可协议](#licensing) * [致贡献者](#note-to-contributors) * [路线图](#roadmap) ## 公告 ## 状态 API 已稳定。 ## 在你的项目中导入此库 ``` go get github.com/go-openapi/swag/{module} ``` 或者为了向后兼容: ``` go get github.com/go-openapi/swag ``` ## 目录 `go-openapi/swag` 暴露了一系列相对独立的模块。 未来,不会再直接在根包级别向 `swag` API 添加新功能, 根包级别保留只是为了向后兼容。所有导出的顶级功能现已被弃用。 子模块将继续演进,未来可能还会添加一些新模块。 | 模块 | 内容 | 主要功能 | |---------------|---------|---------------| | `cmdutils` | 处理 CLI 的实用工具 || | `conv` | 类型转换实用工具 | 转换任意类型的值和指针
将 string 转换为内置类型(封装了 `strconv`)
需要 `./typeutils`(测试依赖)
| | `fileutils` | 文件实用工具 | | | `jsonname` | JSON 实用工具(已弃用) | 从 `go` 属性推断 JSON 名称
请改用 `github.com/go-openapi/jsonpointer/jsonname` | | `jsonutils` | JSON 实用工具 | 快速拼接 JSON
从动态 `go` 数据结构读取和写入 JSON
~需要 `github.com/mailru/easyjson`~
| | `loading` | 文件加载 | 从文件或 http 加载
需要 `./yamlutils`
| | `mangling` | 安全名称生成 | 针对 `go` 的名称重整(name mangling)
| | `netutils` | 网络实用工具 | 从地址获取主机和端口
| | `pools` | 处理 sync.Pools 的实用工具 | | | `stringutils` | `string` 实用工具 | 在 slice 中搜索(支持不区分大小写)
以数组形式拆分/合并查询参数
| | `typeutils` | `go` 类型实用工具 | 检查任意类型的零值
安全地检查 nil 值
| | `yamlutils` | YAML 实用工具 | 将 YAML 转换为 JSON
将 YAML 加载到动态 YAML 文档中
维护 YAML 对象中键的原始顺序
需要 `./jsonutils`
~需要 `github.com/mailru/easyjson`~
需要 `go.yaml.in/yaml/v3`
| ## 依赖 仓库级别的根模块 `github.com/go-openapi/swag` 维护着少量 标准库之外的依赖。 * YAML 实用工具依赖于 `go.yaml.in/yaml/v3` * JSON 实用工具依赖于其注册的适配器模块: * 默认情况下,仅使用标准库 * `github.com/mailru/easyjson` 现在仅为模块 `github.com/go-openapi/swag/jsonutils/adapters/easyjson/json` 的依赖项,供愿意导入该模块的用户使用。 * 集成测试和基准测试使用所有依赖项,并作为各自的独立模块发布 * 其他依赖项为测试依赖,取自 `github.com/stretchr/testify` ## 用法 **如何在运行时显式注册依赖项?** 以下内容将保持 `swag` 提供的 JSON 实用工具在 `v0.24.1` 之前的工作方式。 ``` import ( "github.com/go-openapi/swag/jsonutils/adapters" easyjson "github.com/go-openapi/swag/jsonutils/adapters/easyjson/json" ) func init() { easyjson.Register(adapters.Registry) } ``` 后续对 `jsonutils.ReadJSON()` 或 `jsonutils.WriteJSON()` 的调用,只要传入的数据结构分别实现了 `easyjson.Unmarshaler` 或 `easyjson.Marshaler`,就会切换至 `easyjson`;否则将回退至标准库。 有关更多详细信息,你还可以查看我们的 [集成测试](jsonutils/adapters/testintegration/integration_suite_test.go#29)。 ## 路线图 查看当前的 [TODO 列表](docs/TODOS.md) ## 更新日志 请参阅 对于 v0.26.0 之前的版本,请参阅[发布说明](./docs/NOTES.md)。 **接下来有什么新内容?** 未来,我们计划: * 为 `go1.25` 构建提供基于 `encoding/json/v2` 的 JSON 适配器实现。 * 为 `goccy/go-json` 和 `jsoniterator/go` 提供类似的实现,也许其他一些 类似的库也会很有趣。
标签:EVTX分析, Go, OpenAPI, Ruby工具, 工具函数, 开发工具库, 日志审计, 类型转换