diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..08cb523 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +go.sum diff --git a/AI.md b/AI.md deleted file mode 100644 index ffa89e0..0000000 --- a/AI.md +++ /dev/null @@ -1,80 +0,0 @@ -# AI Coding Context: @go/file - -本索引供 AI 模型理解 `@go/file` 的逻辑,以生成符合本项目“内存安全、性能优先、语义一致”哲学的代码。 - -## 🛠 API Reference - -### 文件操作 (Filesystem) -- `func Exists(filename string) bool`: 检查文件在磁盘或内存中是否存在。 -- `func ReadBytes(filename string) ([]byte, error)`: 从磁盘或内存读取原始字节。 -- `func MustReadBytes(filename string) []byte`: `ReadBytes` 的封装,忽略错误,直接返回字节。 -- `func Read(filename string) (string, error)`: 读取文件并返回 UTF-8 字符串。 -- `func MustRead(filename string) string`: 忽略错误的 `Read` 实现。 -- `func ReadLines(filename string) ([]string, error)`: 按行读取文件内容。 -- `func MustReadLines(filename string) []string`: 忽略错误的 `ReadLines` 实现。 -- `func WriteBytes(filename string, content []byte) error`: 将字节写入文件,会自动处理父目录创建,高性能 IO。 -- `func Write(filename string, content string) error`: `WriteBytes` 的字符串封装,处理常规文本写入。 -- `func Copy(from, to string) error`: 文件或目录的递归复制。 -- `func CopyToFile(from io.Reader, to string) error`: 从流拷贝数据到文件。 -- `func Remove(path string) error`: 递归删除文件或目录。 -- `func Move(src, dst string) error`: 重命名或移动文件。 -- `func Replace(filename, old, new string) error`: 在文件中对文本进行原地批量替换。 -- `func Search(dir, pattern string) []string`: 在目录下根据通配符模式匹配文件路径。 -- `func ReadDir(filename string) ([]FileInfo, error)`: 读取目录信息,包含内存与磁盘兼容层。 -- `func MustReadDir(filename string) []FileInfo`: 忽略错误的 `ReadDir` 实现。 - -### 对象序列化 (Object/Unmarshal/Marshal) -- `func UnmarshalFile(filename string, to any) error`: 自动识别 YAML/JSON,并进行智能字段映射(支持 snake_case 到 CamelCase 映射)。 -- `func MarshalFile(filename string, data any) error`: 根据后缀自动判定为 JSON 或 YAML 并写入文件。 -- `func MarshalFilePretty(filename string, data any) error`: 同 `MarshalFile`,但输出带缩进的可读格式。 -- `func PatchFile(filename string, patch any) error`: 先读取文件,再将 patch 部分通过智能映射覆盖并回写,适合增量修改配置文件。 - -### 归档与压缩 (Archive/Compress) -- `func Compress(data []byte, cType string) ([]byte, error)`: 支持 gzip/zlib 压缩。 -- `func Decompress(data []byte, cType string) ([]byte, error)`: 支持 gzip/zlib 解压。 -- `func MustGzip(data []byte) []byte`: 强制压缩(仅 gzip)。 -- `func MustGunzip(data []byte) []byte`: 强制解压(仅 gzip)。 -- `func Archive(srcPath, destFile string) error`: 将目录压缩为 .zip 或 .tar.gz。 -- `func Extract(srcFile, destDir string, stripRoot bool) error`: 自动识别格式并解压,`stripRoot` 可去除归档内的顶层目录。 - -### 内存文件系统 (Memory) -- `func AddFileToMemory(mf MemFile)`: 直接向内存中插入一个 `MemFile` 对象。 -- `func ReadFileFromMemory(name string) *MemFile`: 内存文件读取。 -- `func LoadFileToMemory(filename string)`: 物理文件加载到内存。 -- `func SafeLoadFileToMemory(filename string)`: 加载到内存并使用 `SafeBuf` 加密存储。 -- `func LoadFileToMemoryWithCompress(filename string)`: 加载并压缩存储。 -- `func SafeLoadFileToMemoryWithCompress(filename string)`: 加载、压缩并加密存储。 -- `func LoadFileToB64(filename string) *MemFileB64`: 将文件转换为 B64 结构(常用于嵌入式资源)。 -- `func LoadFilesToMemoryFromB64(b64File *MemFileB64)`: 从 B64 结构恢复文件到内存。 -- `func LoadFilesToMemoryFromJson(jsonFiles string)`: 从 JSON 串格式的 B64 资源恢复内存文件。 - -## 🤖 AI 行为准则 - -1. **内存安全优先**:处理敏感文件时,优先使用 `SafeLoad` 系列,并通过 `SafeBuf` 接口操作。 -2. **高性能 IO**:在文件 IO 高并发场景下,默认采用 `WriteBytes` 以保证写入性能。 -3. **语义一致性**:序列化/反序列化(`Unmarshal/Marshal`)通过 `convert.To` 处理自动映射,无需关心字段名不一致问题。 -4. **闭环义务**:任何归档提取或 IO 流操作结束后,必须确保对应资源被 `Close()`。 - -## 🧩 典型模式 (Best Practices) - -* **✅ 安全配置读取**: - ```go - // 安全加载并解密配置,自动处理 yaml/json 转换及字段映射 - SafeLoadFileToMemoryWithCompress("config.yaml") - var cfg Config - UnmarshalFile("config.yaml", &cfg) - ``` - -* **✅ 嵌入文件加载 (编译期注入)**: - ```go - // 使用预处理工具生成的资源描述 JSON - jsonFiles := `{"Name":"/app/config.json", ...}` - LoadFilesToMemoryFromJson(jsonFiles) - ``` - -* **✅ 原子补丁更新**: - ```go - // 自动读取->Patch->写回,保证配置增量变更 - PatchFile("data.json", map[string]any{"version": 2}) - ``` ---- diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..6daf676 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog + +## [1.0.4] - 2026-05-01 +- 版本对齐至 v1.0.4。 +- 移除 AI.md,将其内容整合至 README.md,提升模块文档规范。 +- 进一步优化文件系统 API 交互细节。 + +## [1.0.0] - 2026-05-01 +- 初始版本归档与模块对齐。 +- 修复了依赖引用问题(convert 模块函数命名不一致导致编译失败)。 diff --git a/README.md b/README.md index 49d18fa..d87aca1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# go/file +# go/file (v1.0.4) `go/file` 是一个为 Go 语言项目设计的轻量级、高性能且具备内存安全特性的文件系统操作与资源管理库。它封装了常见的文件 IO、对象序列化、归档压缩及内存文件映射功能,旨在通过统一的 API 简化开发工作,并提供内置的安全闭环保障。 @@ -9,6 +9,50 @@ * **安全闭环**: 原生支持敏感数据安全缓存 (`SafeBuf`),结合内存零填充 (`ZeroMemory`),极大降低了密钥等敏感信息在内存中泄露的风险。 * **全功能 IO**: 提供从基础 IO 到递归目录操作、文件原地替换及高效压缩归档的一站式解决方案。 +## 🤖 开发与 AI 指导 (Developer & AI Guidelines) + +1. **内存安全优先**: 处理敏感文件时,优先使用 `SafeLoad` 系列,并通过 `SafeBuf` 接口操作。 +2. **高性能 IO**: 在文件 IO 高并发场景下,默认采用 `WriteBytes` 以保证写入性能。 +3. **语义一致性**: 序列化/反序列化(`Unmarshal/Marshal`)通过 `convert.To` 处理自动映射,无需关心字段名不一致问题。 +4. **资源管理**: 任何归档提取或 IO 流操作结束后,必须确保对应资源被 `Close()`。 + +## 快速入门 (Quick Start) + +### 1. 高性能文件读写 +无需手动处理 `os.OpenFile` 和 `defer Close`,支持物理文件与内存模拟文件透明切换。 + +```go +import "apigo.cc/go/file" + +// 简单读取与写入 +content := file.MustRead("config.txt") +file.Write("log.txt", "operation success") + +// 按行读取 +lines := file.MustReadLines("list.txt") +``` + +### 2. 配置文件自动序列化 +自动识别 YAML/JSON,并支持 snake_case 到 CamelCase 的智能字段映射。 + +```go +type AppConfig struct { + UserName string `yaml:"user_name"` + Port int `json:"port"` +} + +var cfg AppConfig +// 自动读取、判别并完成映射 +err := file.UnmarshalFile("config.yaml", &cfg) +``` + +### 3. 原子配置补丁更新 +先读取文件,将补丁部分通过智能映射覆盖并回写,适合增量修改配置文件。 + +```go +// 自动读取 -> 智能 Patch -> 写回 +file.PatchFile("data.json", map[string]any{"debug": true}) +``` ## 🛠 API Reference @@ -56,41 +100,6 @@ - `func LoadFilesToMemoryFromB64(b64File *MemFileB64)`: 从 B64 结构恢复文件到内存。 - `func LoadFilesToMemoryFromJson(jsonFiles string)`: 从 JSON 串格式的 B64 资源恢复内存文件。 -## 快速入门 - -### 文件操作 -```go -import "apigo.cc/go/file" - -// 简单读取与写入 -content := file.MustRead("config.txt") -file.Write("log.txt", "operation success") -``` - -### 序列化与自动映射 -```go -// 自动判别 JSON/YAML 并处理驼峰命名映射 -var cfg AppConfig -err := file.UnmarshalFile("config.yaml", &cfg) -``` - -### 高性能内存资源加载 -```go -// 加载配置,压缩并加密存储在内存中 -file.SafeLoadFileToMemoryWithCompress("secrets.json") -// 读取时自动解密 -mf := file.ReadFileFromMemory("secrets.json") -plain := mf.GetSafeData() -defer plain.Close() -``` - -## 主要模块 - -1. **Filesystem**: 包含文件读写、复制、移动、删除及通配符搜索等标准 IO API。 -2. **Object**: 提供 `UnmarshalFile` 和 `MarshalFile`,负责配置文件与内存对象的高级映射。 -3. **Archive**: 封装了 `tar`, `gzip`, `zip` 等归档与压缩协议,支持目录归档与提取。 -4. **Memory**: 基于内存的轻量级文件系统接口,支持资源的高效加载与安全管理。 - ## 许可证 本项目基于 MIT 许可证开源。