数据导出
Go Cursor SDK 提供了强大的数据导出功能,支持将数据导出为 JSON、CSV 等多种格式。
基本用法
go
import cursor "github.com/vibe-coding-labs/go-cursor-sdk"
// 获取导出器
exporter := client.Export()导出格式
导出为 JSON
go
// 导出会话为 JSON
sessions, err := client.Sessions().ListSessions()
if err != nil {
log.Fatal(err)
}
err = exporter.ExportSessionsJSON(sessions, "sessions.json")
if err != nil {
log.Fatal(err)
}导出为 CSV
go
// 导出统计数据为 CSV
stats, err := client.Stats().GetStatsRange(startDate, endDate)
if err != nil {
log.Fatal(err)
}
err = exporter.ExportStatsCSV(stats, "stats.csv")
if err != nil {
log.Fatal(err)
}批量导出
导出所有数据
go
// 导出所有数据到指定目录
err := exporter.ExportAll("./export", client)
if err != nil {
log.Fatal(err)
}这将创建以下文件结构:
export/
├── sessions.json
├── composers.json
├── stats.csv
├── config.json
├── terminal_history.json
└── mcp_services.json自定义导出
go
// 导出特定类型的数据
err := exporter.ExportSessions("./export/sessions.json", client)
err = exporter.ExportComposers("./export/composers.json", client)
err = exporter.ExportStats("./export/stats.csv", client)实际示例
导出最近的会话
go
// 查询最近 7 天的会话
query := cursor.NewQueryBuilder().
TimeRange(
time.Now().AddDate(0, 0, -7),
time.Now(),
).
Build()
sessions, err := client.Sessions().QuerySessions(query)
if err != nil {
log.Fatal(err)
}
// 导出为 JSON
err = exporter.ExportSessionsJSON(sessions, "recent_sessions.json")
if err != nil {
log.Fatal(err)
}导出统计报告
go
// 获取月度统计
stats, err := client.Stats().GetStatsRange(
time.Now().AddDate(0, -1, 0), // 一个月前
time.Now(),
)
if err != nil {
log.Fatal(err)
}
// 导出为 CSV
err = exporter.ExportStatsCSV(stats, "monthly_report.csv")
if err != nil {
log.Fatal(err)
}导出 MCP 服务配置
go
// 获取 MCP 服务数据
mcpData, err := client.MCPService().GetMCPServiceData()
if err != nil {
log.Fatal(err)
}
// 导出为 JSON
err = exporter.ExportMCPServicesJSON(mcpData, "mcp_services.json")
if err != nil {
log.Fatal(err)
}自定义导出格式
使用自定义编码器
go
// 自定义 JSON 编码
encoder := json.NewEncoder(file)
encoder.SetIndent("", " ")
err := encoder.Encode(data)导出为其他格式
go
// 导出为 YAML
import "gopkg.in/yaml.v3"
data, err := client.Sessions().ListSessions()
if err != nil {
log.Fatal(err)
}
file, err := os.Create("sessions.yaml")
if err != nil {
log.Fatal(err)
}
defer file.Close()
encoder := yaml.NewEncoder(file)
err = encoder.Encode(data)错误处理
go
err := exporter.ExportAll("./export", client)
if err != nil {
switch {
case errors.Is(err, cursor.ErrExportFailed):
log.Fatal("导出失败")
case errors.Is(err, cursor.ErrFileWrite):
log.Fatal("文件写入失败")
default:
log.Fatal(err)
}
}性能优化
流式导出大数据集
go
// 分批导出大量数据
pageSize := 1000
page := 0
file, err := os.Create("large_export.json")
if err != nil {
log.Fatal(err)
}
defer file.Close()
encoder := json.NewEncoder(file)
for {
query := cursor.NewQueryBuilder().
Offset(page * pageSize).
Limit(pageSize).
Build()
sessions, err := client.Sessions().QuerySessions(query)
if err != nil {
log.Fatal(err)
}
if len(sessions) == 0 {
break
}
for _, session := range sessions {
if err := encoder.Encode(session); err != nil {
log.Fatal(err)
}
}
page++
}