gogcli 表单管理实战:`gog forms delete-question` 按索引删除 Google Forms 题目

发布时间:2026/9/17 16:55:57
gogcli 表单管理实战:`gog forms delete-question` 按索引删除 Google Forms 题目 gogcli 表单管理实战gog forms delete-question按索引删除 Google Forms 题目【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli导读gog forms delete-question是 gogcliGoogle Workspace in your terminal提供的表单题目删除命令它允许你在终端中通过表单 ID 与题目索引0 起精确删除 Google Forms 中的某一题目并自动完成越界校验、dry-run 预演与破坏性操作二次确认。读完本文你将掌握该命令的完整用法、全部全局与本地参数、底层 API 调用链Google FormsbatchUpdate的deleteItem请求以及如何借助--dry-run、--force、--json等标志安全地将其接入脚本与 CI 流程。命令概述与命令树定位delete-question是gog forms的子命令其定义位于 internal/cmd/forms.goDeleteQuestion FormsDeleteQuestionCmd cmd: name:delete-question aliases:delete-q,dq,rm-q help:Delete a question by index同时它也挂在gog forms questions之下别名delete/rm/remove/del因此以下两种写法等价gog forms formId delete-question index gog forms questions formId delete index命令位置参数定义在 internal/cmd/forms_modify.gotype FormsDeleteQuestionCmd struct { FormID string arg: name:formId help:Form ID Index int arg: name:index help:Question index (0-based) }formIdGoogle Forms 的表单 ID。既可以是纯 ID如1AbC...也可以是表单编辑页 URLhttps://docs.google.com/forms/d/id/edit。实现中会调用normalizeGoogleID见 internal/cmd/googleid.go自动从 URL 中抽取 ID若传入的是普通字符串则原样保留。index要删除的题目索引从 0 开始计数。用法与典型示例gog forms (form) delete-question (delete-q,dq,rm-q) formId index实际运行示例# 删除表单第 3 题索引 2带交互确认 gog forms 1AbC2dEfGhIjKlMnOpQrStUv delete-question 2 # 使用别名跳过确认 gog forms 1AbC2dEfGhIjKlMnOpQrStUv dq 2 --force # 预演删除不发起任何 API 调用 gog forms 1AbC2dEfGhIjKlMnOpQrStUv rm-q 2 --dry-run # 以 JSON 输出供脚本消费 gog forms 1AbC2dEfGhIjKlMnOpQrStUv delete-q 2 --json --force执行流程与安全机制FormsDeleteQuestionCmd.Runinternal/cmd/forms_modify.go的执行顺序如下参数规范化与前置校验TrimSpacenormalizeGoogleID处理formId空 ID 直接报错empty formIdindex 0报错index must be 0。dry-run 短路若传入--dry-run别名-n/--dryrun/--noop/--preview在触碰认证与发起任何 API 请求之前即输出意图并成功退出。实现见 internal/cmd/dryrun.go文本模式打印Dry run: would forms.delete-question及请求 JSONJSON/TSV 模式分别输出{dry_run:true,...}与dry_run\ttrue行。获取表单并越界校验调用 Forms APIForms.Get拉取当前表单若index len(form.Items)则报错question index N out of range (form has M items)该检查发生在确认提示之前。破坏性确认调用confirmDestructiveCheckedinternal/cmd/confirm.go弹出Proceed to delete question N from form ...? [y/N]:。传入--force/-y/--assume-yes/--yes可跳过在--no-input或非交互终端下则直接拒绝并要求--force。执行删除构造BatchUpdateFormRequest其中DeleteItem的Location.Index即目标索引formLocationIndex通过ForceSendFields: [Index]确保索引 0 也会被序列化发送见 internal/cmd/forms_modify.go随后调用svc.Forms.BatchUpdate(formID, batchReq)完成删除。底层调用的是 Google Forms API 的forms.batchUpdate接口一次只携带一个deleteItem请求若需重排题目可参考同文件中的move-questionMoveItem。输出格式命令支持三种输出模式由全局标志切换默认可读文本输出deleted\ttrue、form_id\tid、index\tN三行 TSV。-j/--json/--machine输出结构化 JSON{ deleted: true, form_id: 1AbC2dEfGhIjKlMnOpQrStUv, index: 2 }-p/--plain/--tsv输出无颜色的稳定 TSV便于解析。若配合--results-onlyJSON 模式只保留主结果、丢弃nextPageToken之类的信封字段。全局 Flags 参考下表为该命令可用的完整全局标志与gog forms一致来自 gog-forms-delete-question.mdFlagTypeDefaultHelp--access-tokenstring直接使用提供的 access token绕过已存的 refresh tokentoken 约 1 小时过期-a--account--acctstring认证账号的邮箱、别名或auto--clientstringOAuth client 名称选择存储的凭据与 token 桶--colorstringauto颜色输出auto|always|never--disable-commandsstring逗号分隔的禁用命令列表支持点路径-n--dry-run--dryrun--noop--previewbool不做修改打印预期动作并以 0 退出--enable-commandsstring逗号分隔的启用命令前缀支持点路径限制 CLI--enable-commands-exactstring逗号分隔的精确启用命令父命令不会隐式启用子命令-y--force--assume-yes--yesbool跳过破坏性命令的确认--gmail-no-sendboolfalse阻止 Gmail 发送操作Agent 安全-h--helpkong.helpFlag显示上下文相关帮助--homestring覆盖 gogcli 的 config/data/state/cache 根目录等价于GOG_HOME-j--json--machineboolfalseJSON 输出到 stdout最适合脚本--no-input--non-interactive--noninteractivebool绝不提示失败代替适合 CI-p--plain--tsvboolfalse输出稳定的可解析文本TSV无颜色--quota-projectstring计入 API 用量的 Google Cloud 项目发送X-Goog-User-Project--readonlyboolfalse运行时阻止所有修改类 API 请求auth add时也仅申请只读 OAuth scope--results-onlyboolJSON 模式下只输出主结果去掉nextPageToken等信封字段--select--pick--projectstringJSON 模式下按逗号分隔选择字段尽力而为支持点路径-v--verbosebool开启详细日志--versionkong.VersionFlag打印版本并退出--wrap-untrustedboolfalseJSON/raw 输出中为外部抓取的文本字段加不可信内容标记对本命令影响最大的三个标志是--dry-run删除前预演不会发起任何 Forms API 调用也不会触发认证流程--force自动化场景下跳过交互式确认否则非交互环境会直接失败--json/--plain让输出可被脚本与 LLM 稳定解析。源码级行为验证测试用例internal/cmd/forms_modify_test.go 中的TestFormsDeleteQuestionValidationAndDryRun用httptest模拟了 Forms API覆盖了三条关键行为越界前置校验对只有 1 个题目的表单执行delete-question form1 5在确认之前即返回out of range错误。dry-run 不产生任何副作用--dry-run下既不会触发batchUpdate也不会触发Forms.Get拉取getCalls不增加验证了“预演完全无副作用”的设计。--force才会真正提交只有--force时batchCalls才会 1说明删除请求确实通过batchUpdate发送。此外internal/cmd/dryrun_e2e_test.go 的端到端 dry-run 用例确认了操作名forms.delete-questionpayload 含form_id与index字段。实用建议与注意事项先查后删删除前先用gog forms formId get或gog forms raw formId获取无损 JSON确认目标索引对应的题目因为索引是 0 起且随增删变化误删会直接改变表单结构。删除会触发索引重排Google Forms 中删除某一题目后后续题目的索引会前移连续删除多项时应从大到小操作或每次删除前重新确认索引。批量脚本接入推荐组合--json --force或--plain --force获得确定性输出与无提示执行在 CI 中若不想强制删除可用--no-input让命令在缺少确认时快速失败而非挂起。安全上下文--readonly会在运行时阻止本命令这类修改类 API 请求--disable-commands/--enable-commands可在 Agent 或受限 shell 中彻底屏蔽该命令。相关命令gog forms —— 表单命令父级包含 create/get/update/publish 等gog forms add-question —— 新增题目含题型、选项、计分gog forms move-question —— 按索引移动题目gog forms questions —— 题目操作的另一种命令入口Command index —— 全部命令索引/DSMLparameter /DSMLinvoke /DSMLtool_calls【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考