You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Golang通过批量请求向Google Calendar添加多个事件

使用Golang向Google Calendar发送批量请求插入事件

前置准备

  1. 确保已启用Google Calendar API,并获取对应的凭据(服务账号密钥或OAuth2客户端ID)。
  2. 安装依赖包:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 19:01:18