gogcli 实战:用gog tasks lists list在终端列出并管理 Google Tasks 任务列表
【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli
导读
gog tasks lists list是 gogcli(Google Workspace in your terminal)中用于**列出当前 Google 账户全部任务列表(Task List)**的核心命令。它把 Google Tasks API 的tasklists.list接口封装成一行终端命令,支持分页拉取、JSON 结构化输出、TSV 稳定文本输出以及 CI 友好的失败退出码。读完本文,你将掌握该命令的完整用法、全部参数语义、输出格式细节,以及它在 internal/cmd/tasks_lists.go 中的底层实现原理,能直接把它接入日常脚本与自动化工作流。
命令概览:它做什么
gog tasks lists list对应 Google Tasks API 的Tasklists.list()接口(REST 路径GET /tasks/v1/users/@me/lists),作用是返回认证用户拥有的所有任务列表元数据(每个列表的id与title)。在 Google Tasks 的数据模型中,任务列表是任务的顶层容器——先列出任务列表拿到id,后续的gog tasks list <listID>、gog tasks add <listID> ...等操作都以该id为入口。因此这个命令通常是操作 Google Tasks 的第一步。
该命令位于gog tasks命令族下,完整命令树为:
gog tasks (task) <command> [flags] ├── gog tasks lists │ ├── gog tasks lists list ← 本文主角:列出任务列表 │ └── gog tasks lists create ← 创建任务列表(别名 add, new) ├── gog tasks list / add / get / update / done / undo / delete / clear / raw命令树结构定义在 internal/cmd/tasks.go 中:TasksCmd通过TasksListsCmd(位于 internal/cmd/tasks_lists.go)聚合了lists子命令组,其中List字段带有cmd:"" default:"withargs"标签,意味着**gog tasks lists单独执行时默认等价于gog tasks lists list**,无需显式写list。
基本用法
gog tasks (task) lists list [flags](task)表示tasks命令的别名,即gog task lists list与gog tasks lists list等价。最简单的一次调用:
# 列出当前默认账户的所有任务列表 gog tasks lists list # 等价写法(list 是默认子命令,可省略) gog tasks lists命令执行前需要先完成认证(如gog auth add、gog auth login),并通过-a/--account指定账户;未指定时按账户选择规则解析。
核心参数详解(命令专属 Flag)
与分页、结果处理直接相关的 4 个参数定义在TasksListsListCmd结构体(internal/cmd/tasks_lists.go)中:
| Flag | 类型 | 默认值 | 说明 |
|---|---|---|---|
--max--limit | int64 | 100 | 单次最多返回的任务列表数,最大允许 1000 |
--page--cursor | string | 分页令牌(page token),用于从指定页继续拉取 | |
--all--all-pages--allpages | bool | false | 自动翻页,拉取全部任务列表 |
--fail-empty--non-empty--require-results | bool | false | 无结果时以退出码 3 结束,便于脚本与 CI 判断 |
--max / --limit:控制单页大小
默认每页返回 100 条,最大可传 1000。源码中设置了硬性校验(internal/cmd/tasks_lists.go):max必须大于 0,否则直接报max must be > 0。--max 1000可以把一次请求的上限拉满:
gog tasks lists list --max 1000--page / --cursor:手动翻页
Google Tasks API 以nextPageToken标识下一页。将上一次 JSON 输出中nextPageToken字段的值传给--page,即可从指定位置继续:
gog tasks lists list --json --max 100 # 记录输出里的 nextPageToken gog tasks lists list --page <TOKEN> --max 100--all / --all-pages:一键拉全量
当任务列表数量超过单页上限(如超过 100 个)时,--all会在内部循环翻页直到取完所有结果,并把最后一次请求的nextPageToken置空返回。这是最省心的“全量导出”方式:
gog tasks lists list --all--fail-empty / --non-empty / --require-results:CI 结果断言
搭配--no-input使用,可在自动化流水线中把“没有任何任务列表”当作失败信号。该行为的底层实现在 internal/cmd/paging.go 的failEmptyExit中:无结果且开启该 flag 时,进程以退出码 3退出;未开启时正常退出 0。
全局 Flag 详解(继承自根命令)
以下 Flag 为 gogcli 所有子命令共享(见父命令文档 gog tasks lists 与 gog tasks),gog tasks lists list同样全部可用:
认证与账户
| Flag | 类型 | 默认 | 说明 |
|---|---|---|---|
--access-token | string | 直接使用传入的访问令牌(绕过已存储的 refresh token;令牌约 1 小时过期) | |
-a--account--acct | string | 账户邮箱、别名或auto(自动选择),用于认证的 Google API 命令 | |
--client | string | OAuth 客户端名称(选择对应的已存凭据与令牌桶) | |
--quota-project | string | 计入 API 用量的 Google Cloud 项目(以X-Goog-User-Project头发送;部分 API 在配合--access-token或 ADC 时需要) |
输出格式
| Flag | 类型 | 默认 | 说明 |
|---|---|---|---|
-j--json--machine | bool | false | 以 JSON 输出到 stdout(最适合脚本处理) |
-p--plain--tsv | bool | false | 输出稳定的可解析文本到 stdout(TSV,无颜色) |
--results-only | bool | JSON 模式下仅输出主结果(丢弃nextPageToken等信封字段) | |
--select--pick--project | string | JSON 模式下按逗号分隔选择字段(尽力而为,支持点路径);多数命令推荐优先使用--fields | |
--color | string | auto | 颜色输出:auto|always|never |
--wrap-untrusted | bool | false | JSON/raw 输出时,将拉取到的文本字段包裹在外部不可信内容标记中 |
安全与只读
| Flag | 类型 | 默认 | 说明 |
|---|---|---|---|
--readonly | bool | false | 运行时拦截所有变更类 API 请求;auth add也会申请只读 OAuth scope |
--gmail-no-send | bool | false | 阻止 Gmail 发送操作(Agent 安全开关) |
-n--dry-run--dryrun--noop--preview | bool | 不执行变更,仅打印预期动作并以成功退出 | |
-y--force--assume-yes--yes | bool | 跳过破坏性命令的确认提示 |
命令启用控制与杂项
| Flag | 类型 | 默认 | 说明 |
|---|---|---|---|
--enable-commands | string | 逗号分隔的启用命令前缀(支持点路径;用于收窄 CLI 可用范围) | |
--enable-commands-exact | string | 逗号分隔的精确启用命令(支持点路径;父命令不会连带启用子命令) | |
--disable-commands | string | 逗号分隔的禁用命令列表(支持点路径) | |
--no-input--non-interactive--noninteractive | bool | 永不提示,遇到需要交互的场景直接失败(适合 CI) | |
--home | string | 覆盖 gogcli 配置/数据/状态/缓存根目录(等价于环境变量GOG_HOME) | |
-h--help | kong.helpFlag | 显示上下文相关帮助 | |
--version | kong.VersionFlag | 打印版本并退出 | |
-v--verbose | bool | 开启详细日志 |
输出格式详解与示例
默认文本表格
不带任何输出格式 flag 时,命令以制表符分隔的两列表格输出,表头为ID与TITLE(见 internal/cmd/tasks_lists.go):
$ gog tasks lists list ID TITLE MDQ3... My Tasks MDQ3... Shopping MDQ3... Reading当结果为空时,文本模式会向 stderr 打印No task lists,再依据--fail-empty决定退出码。
JSON 输出(脚本首选)
-j/--json模式向 stdout 输出结构化 JSON,信封包含tasklists(主结果数组)与nextPageToken(分页令牌):
{ "tasklists": [ {"id": "MDQ3...", "title": "My Tasks"}, {"id": "MDQ3...", "title": "Shopping"} ], "nextPageToken": "" }配合jq即可批量提取任务列表 ID:
gog tasks lists list --json | jq -r '.tasklists[].id'若只想拿到tasklists数组本身(丢弃信封字段),追加--results-only。
TSV 稳定输出
-p/--plain/--tsv输出无颜色的稳定可解析文本,适合管道处理与行级 diff:
gog tasks lists list -p > tasklists.tsv分页提示
当一页未拉完且未指定--all时,文本模式下会在末尾提示--all/--all-pages用法(printNextPageHintWithAll),避免用户遗漏剩余数据。
底层实现:从命令到 Google Tasks API
TasksListsListCmd.Run(internal/cmd/tasks_lists.go)的执行链路清晰可循:
- 校验参数:
c.Max <= 0时返回usage("max must be > 0")。 - 解析账户:
requireAccount(flags)(internal/cmd/account.go)根据--account解析出实际使用的账户。 - 获取服务句柄:
tasksService(ctx, account)(internal/cmd/runtime_services.go)从运行时注册表中取出*tasks.Service,由runtime.Services.Tasks(ctx, account)按账户创建,底层是google.golang.org/api/tasks/v1官方客户端。 - 构造分页回调:闭包
fetch(pageToken)调用svc.Tasklists.List().MaxResults(c.Max).Context(ctx),非空时附加PageToken(pageToken),返回resp.Items与resp.NextPageToken。 - 统一分页处理:
loadPagedItems(c.Page, c.All, fetch)(internal/cmd/paged_list_helpers.go)在--all开启时调用collectAllPages循环翻页合并所有结果;否则只执行单次fetch。这正是--all与--page二选一语义的源码依据。 - 输出与空结果处理:JSON 模式写入
tasklists+nextPageToken信封,随后按failEmptyExit判定退出码;文本模式输出ID\tTITLE表格,空结果先打印No task lists再判定。
测试验证:行为有据可查
仓库内置了针对该命令的完整单元测试,可作为行为契约参考:
- internal/cmd/execute_tasks_test.go:
TestExecute_TasksLists_JSON用httptest模拟GET /tasks/v1/users/@me/lists,断言--json tasks lists --max 10的输出能被解析为含两个任务列表的tasklists数组。 - internal/cmd/tasks_text_test.go:
TestTasks_TextPaths覆盖文本路径下的 list/create 等命令;TestTasksLists_NoItems(同文件 L122 起)验证空结果场景下命令不报错的行为。
这些测试同时印证了命令对应的 REST 路径(/tasks/v1/users/@me/lists)与参数透传方式,方便你联调或排查问题。
与相关命令配合的实战流程
任务列表 id 是后续一切任务操作的入口,典型工作流如下:
# 1. 列出全部任务列表,拿到目标列表 id gog tasks lists list --all -p # 2. 查看某个列表下的所有任务 gog tasks list <listID> # 3. 向该列表添加任务 gog tasks add <listID> --title "撰写周报" --due 2026-09-18T18:00:00Z需要新建列表时使用兄弟命令gog tasks lists create <title>(支持别名add、new),例如gog tasks lists create "Weekly"。gogcli 完整的 Tasks 命令集(add / clear / delete / done / get / list / raw / undo / update)参见 gog tasks。
安全与自动化建议
- 只读审计:列表查询是只读操作,配合
--readonly可进一步确保不会误发变更请求,适合在共享/受管环境执行。 - CI 断言:
gog tasks lists list --json --no-input --fail-empty可作为一个健康检查——若账户下没有任何任务列表,则以退出码 3 标记失败。 - 避免敏感内容输出:任务列表标题属于外部数据,在拼接 JSON/raw 输出给下游时可按需使用
--wrap-untrusted包裹文本字段,降低不可信内容注入风险。 - 令牌过期注意:若使用
--access-token直传令牌,注意其约 1 小时的有效期限制;长时间运行的脚本建议改用已存储的凭据流程。
补充说明
本文引用的命令参考文档由gog schema --json自动生成(页首标注Generated from gog schema --json,通过make docs-commands重建,见 docs/commands/README.md)。因此文档中的 Flag 表与当前二进制的实际参数完全一致;若需以编程方式获取同款参数定义,可自行运行gog schema --json查看机器可读的完整命令树。
【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考