2026-04-22 14:33:03 +08:00
|
|
|
|
# 关于本项目
|
|
|
|
|
|
|
|
|
|
|
|
本项目完全由 AI 维护。代码源自 github.com/ssgo/u 的重构。
|
|
|
|
|
|
|
2026-04-22 13:48:27 +08:00
|
|
|
|
# @go/encoding
|
2026-04-22 11:35:04 +08:00
|
|
|
|
|
2026-05-06 00:11:50 +08:00
|
|
|
|
`@go/encoding` 是一个为“极简、安全、无摩擦”业务开发设计的编解码工具库。它统一了二进制数据与文本处理的 API 语义,通过与 `go/cast` 结合,极大降低了业务逻辑中的错误处理心智负担。
|
2026-04-22 13:48:27 +08:00
|
|
|
|
|
|
|
|
|
|
## 🎯 设计哲学
|
|
|
|
|
|
|
|
|
|
|
|
* **API 原生直觉**:二进制操作基于 `[]byte`,文本表现类操作(如 HTML/URL)基于 `string`,与 Go 原生习惯保持高度一致。
|
2026-05-06 00:11:50 +08:00
|
|
|
|
* **消除摩擦 (Frictionless)**:废除 `Must` 前缀函数,推荐配合 `cast.As` 使用以实现更优雅的静默处理,降低业务代码中无效的错误检查噪声。
|
2026-04-22 13:48:27 +08:00
|
|
|
|
* **极致纯粹**:废除所有冗余的封装,强制数据链路层以 `[]byte` 形式流转,确保底层安全性与性能。
|
|
|
|
|
|
|
|
|
|
|
|
## 🛠 API Reference
|
|
|
|
|
|
|
|
|
|
|
|
### 基础编解码 (Hex/Base64)
|
|
|
|
|
|
- `func Hex(data []byte) []byte` / `func HexToString(data []byte) string`
|
2026-05-06 00:11:50 +08:00
|
|
|
|
- `func UnHex(data []byte) ([]byte, error)` / `func UnHexFromString(data string) ([]byte, error)`
|
2026-04-22 13:48:27 +08:00
|
|
|
|
- `func Base64(data []byte) []byte` / `func Base64ToString(data []byte) string`
|
2026-05-06 01:11:39 +08:00
|
|
|
|
- `func Base64Raw(data []byte) []byte` / `func Base64RawToString(data []byte) string` (无填充版本)
|
|
|
|
|
|
- `func UnBase64(data []byte) ([]byte, error)` / `func UnBase64FromString(data string) ([]byte, error)` (智能兼容填充与无填充)
|
2026-05-06 00:11:50 +08:00
|
|
|
|
- `func UrlBase64(data []byte) []byte` / `func UrlBase64ToString(data []byte) string`
|
2026-05-06 01:11:39 +08:00
|
|
|
|
- `func UrlBase64Raw(data []byte) []byte` / `func UrlBase64RawToString(data []byte) string` (无填充版本)
|
|
|
|
|
|
- `func UnUrlBase64(data []byte) ([]byte, error)` / `func UnUrlBase64FromString(data string) ([]byte, error)` (智能兼容填充与无填充)
|
2026-04-22 13:48:27 +08:00
|
|
|
|
|
|
|
|
|
|
### Web 编码 (URL/HTML)
|
|
|
|
|
|
- `func UrlEncode(data []byte) string`
|
2026-05-06 00:11:50 +08:00
|
|
|
|
- `func UnUrlEncode(data string) ([]byte, error)`
|
2026-04-22 13:48:27 +08:00
|
|
|
|
- `func HtmlEscape(data []byte) string`
|
2026-05-06 00:11:50 +08:00
|
|
|
|
- `func HtmlUnescape(data string) string`
|
2026-04-22 13:48:27 +08:00
|
|
|
|
|
|
|
|
|
|
### 整数与自定义进制 (IntEncoder)
|
|
|
|
|
|
- `func EncodeInt(u uint64) []byte`
|
|
|
|
|
|
- `func AppendInt(buf []byte, u uint64) []byte`
|
|
|
|
|
|
- `func DecodeInt(buf []byte) uint64`
|
2026-05-01 13:41:06 +08:00
|
|
|
|
- `func FillInt(buf []byte, length int) []byte`
|
2026-04-22 13:48:27 +08:00
|
|
|
|
- `func ExchangeInt(buf []byte) []byte`
|
|
|
|
|
|
- `func HashInt(data []byte, key []byte) []byte`
|
|
|
|
|
|
|
|
|
|
|
|
## 📦 安装
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
go get apigo.cc/go/encoding
|
|
|
|
|
|
```
|
2026-05-06 00:11:50 +08:00
|
|
|
|
|
|
|
|
|
|
## 💡 示例 (配合 cast.As 消除摩擦)
|
|
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
|
import (
|
|
|
|
|
|
"apigo.cc/go/encoding"
|
|
|
|
|
|
"apigo.cc/go/cast"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// 配合 cast.As 替代原有的 MustUnHex 系列
|
|
|
|
|
|
data := cast.As(encoding.UnHexFromString("68656c6c6f"))
|
|
|
|
|
|
```
|