Skip to content

v1.0.0

Choose a tag to compare

@Scorpio69t Scorpio69t released this 17 Dec 08:40
47c93a0

RustFS Go SDK v1.0.0 发布说明

🎉 首个正式版本发布!

我们很高兴地宣布 RustFS Go SDK v1.0.0 正式发布!这是一个功能完整、生产就绪的 Go 客户端库,用于与 RustFS 对象存储系统交互。

✨ 主要特性

🚀 完整的 S3 兼容性

  • 支持所有标准 S3 API 操作
  • 完整的 AWS Signature V4 和 V2 支持
  • 流式签名支持(用于大文件分块上传)

🏗️ 模块化设计

// 清晰的服务分离
bucketSvc := client.Bucket()
objectSvc := client.Object()

// 链式选项模式
bucketSvc.Create(ctx, "my-bucket",
    bucket.WithRegion("us-east-1"),
    bucket.WithObjectLocking(false),
)

🏥 内置健康检查

// 简单易用的健康检查
result := client.HealthCheck(nil)
if result.Healthy {
    fmt.Printf("服务健康,响应时间: %v\n", result.ResponseTime)
}

// 支持重试
result := client.HealthCheckWithRetry(opts, 3)

📊 HTTP 请求追踪

  • 记录 DNS 查询、TCP 连接、TLS 握手等时间
  • 便于性能分析和问题诊断
  • 轻量级设计,对性能影响最小

⚡ 性能优化

  • 智能连接池管理
  • 位置缓存减少不必要的请求
  • 可配置的重试机制
  • 支持并发操作

📦 核心功能

Bucket 操作

  • ✅ 创建/删除存储桶
  • ✅ 列出所有存储桶
  • ✅ 检查存储桶是否存在
  • ✅ 获取存储桶位置
  • ✅ 支持区域、对象锁定等高级选项

Object 操作

  • ✅ 上传/下载对象
  • ✅ 流式上传下载(高效处理大文件)
  • ✅ 获取对象信息和元数据
  • ✅ 删除对象
  • ✅ 列出对象(支持前缀过滤、递归列表)
  • ✅ 复制对象(支持元数据操作)

分片上传

  • ✅ 完整的分片上传流程
  • ✅ 支持大文件并行上传
  • ✅ 自动错误处理和重试
  • ✅ 最小分片大小:5MB(除最后一个分片)

📚 文档和示例

完整示例

# 存储桶操作
go run -tags example examples/rustfs/bucketops.go

# 对象操作
go run -tags example examples/rustfs/objectops.go

# 分片上传
go run -tags example examples/rustfs/multipart.go

# 健康检查
go run -tags example examples/rustfs/health.go

# HTTP 追踪
go run -tags example examples/rustfs/trace.go

文档

🔧 安装和使用

安装

go get github.com/Scorpio69t/rustfs-go

快速开始

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/Scorpio69t/rustfs-go"
    "github.com/Scorpio69t/rustfs-go/pkg/credentials"
)

func main() {
    // 初始化客户端
    client, err := rustfs.New("127.0.0.1:9000", &rustfs.Options{
        Credentials: credentials.NewStaticV4("access-key", "secret-key", ""),
        Secure:      false,
    })
    if err != nil {
        log.Fatal(err)
    }

    ctx := context.Background()

    // 创建存储桶
    bucketSvc := client.Bucket()
    if err := bucketSvc.Create(ctx, "my-bucket"); err != nil {
        log.Fatal(err)
    }

    // 上传对象
    objectSvc := client.Object()
    data := strings.NewReader("Hello, RustFS!")
    _, err = objectSvc.Put(ctx, "my-bucket", "hello.txt",
        data, int64(data.Len()))
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("上传成功!")
}

📊 测试和质量

测试覆盖

  • ✅ 150+ 单元测试用例
  • ✅ 测试覆盖率 > 60%
  • ✅ 所有核心功能经过测试
  • ✅ 集成测试验证实际场景

构建状态

$ go test ./...
ok      github.com/Scorpio69t/rustfs-go         1.705s
ok      github.com/Scorpio69t/rustfs-go/bucket  3.199s
ok      github.com/Scorpio69t/rustfs-go/internal/core   11.139s
ok      github.com/Scorpio69t/rustfs-go/internal/signer 4.544s
ok      github.com/Scorpio69t/rustfs-go/internal/transport      4.604s
ok      github.com/Scorpio69t/rustfs-go/object  4.247s

🛣️ 路线图

v1.1.0 (下一个版本)

  • 预签名 URL 支持
  • 对象标签管理 API
  • 更多的配置选项

v1.2.0 (未来)

  • 存储桶策略管理
  • 生命周期规则
  • 服务端加密
  • 对象版本控制

🤝 贡献

我们欢迎所有形式的贡献!

  • 🐛 报告 Bug
  • 💡 提出新功能建议
  • 📝 改进文档
  • 🔧 提交代码

请查看 CONTRIBUTING.md 了解详细信息。

📝 许可证

Apache License 2.0 - 详见 LICENSE 文件

🙏 致谢

感谢所有为这个项目做出贡献的开发者!

特别感谢:

  • MinIO Go SDK - 提供了优秀的参考实现
  • RustFS 团队 - 提供了高性能的对象存储服务

📞 支持


Happy Coding! 🚀