gogcli 实战:用 `gog tasks lists list` 在终端列出并管理 Google Tasks 任务列表
2026/9/17 16:21:47 网站建设 项目流程

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),作用是返回认证用户拥有的所有任务列表元数据(每个列表的idtitle)。在 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 listgog tasks lists list等价。最简单的一次调用:

# 列出当前默认账户的所有任务列表 gog tasks lists list # 等价写法(list 是默认子命令,可省略) gog tasks lists

命令执行前需要先完成认证(如gog auth addgog auth login),并通过-a/--account指定账户;未指定时按账户选择规则解析。

核心参数详解(命令专属 Flag)

与分页、结果处理直接相关的 4 个参数定义在TasksListsListCmd结构体(internal/cmd/tasks_lists.go)中:

Flag类型默认值说明
--max
--limit
int64100单次最多返回的任务列表数,最大允许 1000
--page
--cursor
string分页令牌(page token),用于从指定页继续拉取
--all
--all-pages
--allpages
boolfalse自动翻页,拉取全部任务列表
--fail-empty
--non-empty
--require-results
boolfalse无结果时以退出码 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-tokenstring直接使用传入的访问令牌(绕过已存储的 refresh token;令牌约 1 小时过期)
-a
--account
--acct
string账户邮箱、别名或auto(自动选择),用于认证的 Google API 命令
--clientstringOAuth 客户端名称(选择对应的已存凭据与令牌桶)
--quota-projectstring计入 API 用量的 Google Cloud 项目(以X-Goog-User-Project头发送;部分 API 在配合--access-token或 ADC 时需要)

输出格式

Flag类型默认说明
-j
--json
--machine
boolfalse以 JSON 输出到 stdout(最适合脚本处理)
-p
--plain
--tsv
boolfalse输出稳定的可解析文本到 stdout(TSV,无颜色)
--results-onlyboolJSON 模式下仅输出主结果(丢弃nextPageToken等信封字段)
--select
--pick
--project
stringJSON 模式下按逗号分隔选择字段(尽力而为,支持点路径);多数命令推荐优先使用--fields
--colorstringauto颜色输出:auto|always|never
--wrap-untrustedboolfalseJSON/raw 输出时,将拉取到的文本字段包裹在外部不可信内容标记中

安全与只读

Flag类型默认说明
--readonlyboolfalse运行时拦截所有变更类 API 请求;auth add也会申请只读 OAuth scope
--gmail-no-sendboolfalse阻止 Gmail 发送操作(Agent 安全开关)
-n
--dry-run
--dryrun
--noop
--preview
bool不执行变更,仅打印预期动作并以成功退出
-y
--force
--assume-yes
--yes
bool跳过破坏性命令的确认提示

命令启用控制与杂项

Flag类型默认说明
--enable-commandsstring逗号分隔的启用命令前缀(支持点路径;用于收窄 CLI 可用范围)
--enable-commands-exactstring逗号分隔的精确启用命令(支持点路径;父命令不会连带启用子命令)
--disable-commandsstring逗号分隔的禁用命令列表(支持点路径)
--no-input
--non-interactive
--noninteractive
bool永不提示,遇到需要交互的场景直接失败(适合 CI)
--homestring覆盖 gogcli 配置/数据/状态/缓存根目录(等价于环境变量GOG_HOME
-h
--help
kong.helpFlag显示上下文相关帮助
--versionkong.VersionFlag打印版本并退出
-v
--verbose
bool开启详细日志

输出格式详解与示例

默认文本表格

不带任何输出格式 flag 时,命令以制表符分隔的两列表格输出,表头为IDTITLE(见 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)的执行链路清晰可循:

  1. 校验参数c.Max <= 0时返回usage("max must be > 0")
  2. 解析账户requireAccount(flags)(internal/cmd/account.go)根据--account解析出实际使用的账户。
  3. 获取服务句柄tasksService(ctx, account)(internal/cmd/runtime_services.go)从运行时注册表中取出*tasks.Service,由runtime.Services.Tasks(ctx, account)按账户创建,底层是google.golang.org/api/tasks/v1官方客户端。
  4. 构造分页回调:闭包fetch(pageToken)调用svc.Tasklists.List().MaxResults(c.Max).Context(ctx),非空时附加PageToken(pageToken),返回resp.Itemsresp.NextPageToken
  5. 统一分页处理loadPagedItems(c.Page, c.All, fetch)(internal/cmd/paged_list_helpers.go)在--all开启时调用collectAllPages循环翻页合并所有结果;否则只执行单次fetch。这正是--all--page二选一语义的源码依据。
  6. 输出与空结果处理:JSON 模式写入tasklists+nextPageToken信封,随后按failEmptyExit判定退出码;文本模式输出ID\tTITLE表格,空结果先打印No task lists再判定。

测试验证:行为有据可查

仓库内置了针对该命令的完整单元测试,可作为行为契约参考:

  • internal/cmd/execute_tasks_test.go:TestExecute_TasksLists_JSONhttptest模拟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>(支持别名addnew),例如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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询