如何使用Golang通过批量请求向Google Calendar添加多个事件
使用Golang向Google Calendar发送批量请求插入事件
前置准备
- 确保已启用Google Calendar API,并获取对应的凭据(服务账号密钥或OAuth2客户端ID)。
- 安装依赖包:
go get google.golang.org/api/calendar/v3 go get google.golang.org/api/googleapi/transport/batch go get google.golang.org/api/option
实现步骤与代码示例
Google API的Go客户端支持通过batch包构建批量请求,以下是完整的批量插入事件实现:
package main import ( "context" "fmt" "google.golang.org/api/calendar/v3" "google.golang.org/api/googleapi/transport/batch" "google.golang.org/api/option" ) func main() { ctx := context.Background() // 初始化Calendar服务(这里以服务账号认证为例) svc, err := calendar.NewService(ctx, option.WithCredentialsFile("service-account-key.json")) if err != nil { fmt.Printf("初始化Calendar服务失败: %v\n", err) return } // 创建批量请求实例 batchReq := batch.New(svc.Client()) // 准备要插入的事件列表 events := []*calendar.Event{ { Summary: "团队同步会议", Location: "会议室B", Description: "同步本周项目进展", Start: &calendar.EventDateTime{ DateTime: "2024-06-20T09:30:00+08:00", TimeZone: "Asia/Shanghai", }, End: &calendar.EventDateTime{ DateTime: "2024-06-20T10:30:00+08:00", TimeZone: "Asia/Shanghai", }, }, { Summary: "客户演示", Location: "线上Zoom", Description: "演示新产品功能", Start: &calendar.EventDateTime{ DateTime: "2024-06-21T14:00:00+08:00", TimeZone: "Asia/Shanghai", }, End: &calendar.EventDateTime{ DateTime: "2024-06-21T15:30:00+08:00", TimeZone: "Asia/Shanghai", }, }, // 可添加更多事件... } // 将每个事件插入请求添加到批量任务中 for idx, event := range events { // 创建单个事件插入请求("primary"代表用户主日历,可替换为目标日历ID) insertReq := svc.Events.Insert("primary", event) // 添加到批量请求,并定义回调处理单个请求的结果 err := batchReq.Add(insertReq, func(resp *calendar.Event, err error) { if err != nil { fmt.Printf("第%d个事件插入失败: %v\n", idx+1, err) return } fmt.Printf("第%d个事件插入成功,事件ID: %s\n", idx+1, resp.Id) }) if err != nil { fmt.Printf("添加第%d个事件到批量请求失败: %v\n", idx+1, err) return } } // 执行批量请求 if err := batchReq.Do(ctx); err != nil { fmt.Printf("批量请求执行失败: %v\n", err) return } fmt.Println("所有批量任务执行完成") }
关键注意事项
- 批量请求限制:Google Calendar API单批请求最多支持1000个操作,单批请求大小不能超过10MB。如果事件数量超过限制,需要拆分多个批次处理。
- 认证方式:如果是面向终端用户的应用,需使用OAuth2授权流程替换服务账号认证,可通过
option.WithTokenSource传入已授权的令牌源。 - 错误隔离:批量请求中单个操作失败不会影响其他操作,务必在回调中处理每个请求的错误,避免遗漏失败的插入任务。
- 日历ID:除了"primary"主日历,你可以使用具体的日历ID(比如共享日历的ID)来指定事件插入的目标日历。
内容的提问来源于stack exchange,提问作者Sahildeep Kaur
相关产品推荐
相关产品推荐

