gogcli 教程:使用 `gog classroom guardian-invitations get` 查询 Google Classroom 监护人邀请详情
2026/9/16 23:15:24 网站建设 项目流程

gogcli 教程:使用gog classroom guardian-invitations get查询 Google Classroom 监护人邀请详情

【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli

gog classroom guardian-invitations get是 gogcli(Google Workspace in your terminal)CLI 中用于按studentIdinvitationId精确读取某条监护人(Guardian)邀请记录的只读命令。本文围绕该命令的完整用法展开:先给出命令在 Classroom 命令树中的位置与别名体系,再逐一讲解两个必选位置参数、纯文本(TSV)与 JSON 两种输出格式的字段语义,最后结合仓库源码与测试用例剖析其底层调用链与错误处理方式,帮助你把它接入自动化脚本或日常巡检流程。

命令定位:Classroom 命令树中的 guardian-invitations 分支

在 gogcli 的 Classroom 子命令树中,监护人邀请是独立于"已建立的监护人关系(guardians)"的一个分支。从源码 internal/cmd/classroom.go 可以看到,顶层gog classroom同时挂载了两个相关命令组:

  • guardians(别名guardian):管理已生效的监护人记录(list / get / delete);
  • guardian-invitations(别名guardian-invites):管理待监护人接受的邀请(list / get / create)。

guardian-invitations组内部由 internal/cmd/classroom_guardians.go 中的ClassroomGuardianInvitesCmd定义:

type ClassroomGuardianInvitesCmd struct { List ClassroomGuardianInvitesListCmd `cmd:"" default:"withargs" aliases:"ls" help:"List guardian invitations"` Get ClassroomGuardianInvitesGetCmd `cmd:"" aliases:"info,show" help:"Get a guardian invitation"` Create ClassroomGuardianInvitesCreateCmd `cmd:"" aliases:"add,new" help:"Create a guardian invitation"` }

与"监护人关系"不同,guardian-invitations只有创建与读取操作(没有 delete/update),因为邀请的生命周期(待处理 PENDING / 已完成 COMPLETE)由被邀请方或 Google 后台驱动。get命令定位是:给定学生与邀请 ID,获取一条邀请的完整快照,对应文档 gog-classroom-guardian-invitations-get.md。

用法语法与别名体系

文档定义的标准用法如下:

gog classroom (class) guardian-invitations (guardian-invites) get (info,show) <studentId> <invitationId>

括号表示可选等价写法,因此以下命令完全等价:

gog classroom guardian-invitations get s1 gi1 gog classroom guardian-invites get s1 gi1 # 使用父命令别名 gog classroom guardian-invitations show s1 gi1 # 使用 get 的别名 gog classroom guardian-invites info s1 gi1 # 别名组合使用

从命令行解析角度看,这些别名全部由 go-kong 的aliases标签声明(见ClassroomGuardianInvitesGetCmdaliases:"info,show"与父命令的aliases:"guardian-invites"),所以无论你习惯长名称还是短名称,都会命中同一个Run方法。

该命令属于纯读操作,不需要--force/--yes确认,也不会触发 dry-run 拦截;配合文档中推荐的-j/--json-p/--plain输出标志,非常适合写入脚本或 Agent 工具链。

位置参数详解

命令只接受两个必选位置参数(源码结构体定义见 internal/cmd/classroom_guardians.go):

参数类型说明
<studentId>string学生 ID,即 Classroom 学生资料的用户标识,必填,不可为空
<invitationId>string监护人邀请 ID,由 Classroom API 在创建邀请时分配,必填,不可为空

参数校验在源码Run方法中显式完成:studentIdinvitationId均会先strings.TrimSpace去除首尾空白,再判空;任一为空都会返回usage错误(对应"empty studentId"/"empty invitationId"),错误码为命令行参数错误(从项目测试可见参数类错误退出码为 2)。

如何拿到这两个 ID?通常的组合路径是:

  1. 先列出学生:gog classroom students <courseId>,取得studentId
  2. 再列出该学生的监护人邀请:gog classroom guardian-invitations list <studentId>,在输出中看到INVITATION_ID(对应源码展示列INVITATION_ID);
  3. 最后用本命令针对具体invitationId做精确查询。

输出格式:TSV 纯文本与 JSON

get命令会根据全局输出标志切换两种返回形态,分支判断在 internal/cmd/classroom_guardians.go 中。

纯文本模式(默认 /-p/--plain/--tsv

默认人类可读输出为key\tvalue的键值对形式(稳定、可 parse):

id gi1 student_id s1 email guardian@example.com state PENDING created 2026-06-12T12:00:00Z

字段语义与 Classroom API 的GuardianInvitation资源一一对应:

输出行来源字段说明
idInvitationId邀请唯一标识
student_idStudentId关联学生 ID
emailInvitedEmailAddress被邀请的监护人邮箱地址
stateState邀请状态,取值PENDING(待处理)或COMPLETE(已完成)
createdCreationTime创建时间(RFC3339 格式),仅当非空时才输出该行

注意created行的条件输出逻辑(源码if inv.CreationTime != ""),这意味着当 Classroom API 未返回创建时间时,纯文本输出中会缺少该行——脚本解析时不应假定字段固定存在。

JSON 模式(-j/--json/--machine

JSON 模式下命令将完整资源包装在invitation键下输出:

{ "invitation": { "invitationId": "gi1", "studentId": "s1", "invitedEmailAddress": "guardian@example.com", "state": "PENDING", "creationTime": "2026-06-12T12:00:00Z" } }

该包装结构来自源码:

return outfmt.WriteJSON(ctx, stdoutWriter(ctx), map[string]any{"invitation": inv})

invitation键下是 Classroom Go SDKclassroom.GuardianInvitation序列化后的完整字段,比纯文本模式多出 API 返回的全部原始属性(如userId等可选字段),适合需要完整数据的下游程序。若只要主结果、丢弃包裹层,可叠加--results-only;若要挑选字段,可使用--select(带点路径支持)。

全局 Flags 速查

get命令自身只携带两个位置参数,但继承 gogcli 全部全局标志。以下为文档 flags 表中与日常脚本使用最相关的一组,完整清单见 gog-classroom-guardian-invitations-get.md:

Flag类型默认作用
-a/--account/--acctstring指定账户邮箱、别名或auto(Google API 命令通用)
--clientstring指定 OAuth 客户端名(选择对应凭证与令牌桶)
--access-tokenstring直接使用提供的访问令牌(绕过存储的 refresh token;令牌约 1 小时过期)
--quota-projectstring指定为 API 用量计费的 GCP 项目(发送X-Goog-User-Project
-j/--json/--machineboolfalseJSON 输出到 stdout,脚本友好
-p/--plain/--tsvboolfalse稳定可解析的 TSV 文本输出,无颜色
--results-onlyboolJSON 模式只输出主结果,去掉 nextPageToken 等信封字段
--select/--pick/--projectstringJSON 模式下按逗号分隔字段名选取(尽力而为,支持点路径)
--readonlyboolfalse运行时拦截一切变更类 API 请求;本命令天然兼容
--no-input/--non-interactivebool不提示、直接失败(CI 场景)
--gmail-no-sendboolfalse阻止 Gmail 发送操作(Agent 安全)
--dry-run/-nbool不实际执行,打印预期动作后成功退出
--enable-commands/--disable-commands/--enable-commands-exactstring以点路径白/黑名单限制可用命令(Agent 沙箱场景)
--wrap-untrustedboolfalseJSON/raw 输出中对拉取的文本字段包裹外部不可信内容标记
--homestring覆盖 gogcli 配置/数据/状态/缓存根目录(等价GOG_HOME
--colorstringauto颜色输出:auto / always / never
-v/--verbosebool开启详细日志
-h/--helpkong.helpFlag上下文相关帮助

针对本命令建议:做审计查询时固定--account--client避免歧义;接入 CI 时加--no-input--json;若只关心某几个字段,配合--select收敛输出体积。

源码级实现:一次查询背后的调用链

getRun方法(internal/cmd/classroom_guardians.go)执行顺序如下:

  1. 账户解析requireAccount(flags)从全局标志解析出当前 Google 账户;

  2. 参数校验:trim 后判空,空参数直接返回usage错误;

  3. 服务构建classroomService(ctx, account)创建 Classroom API 客户端,失败时经wrapClassroomError包装为带上下文的友好错误;

  4. API 调用:核心一行

    inv, err := svc.UserProfiles.GuardianInvitations.Get(studentID, invitationID).Context(ctx).Do()

    即调用 Google Classroom API 的userProfiles.guardianInvitations.get端点,Context(ctx)保证请求可被取消/超时控制;

  5. 输出分发:按outfmt.IsJSON(ctx)选择 JSON 包装输出或纯文本键值输出。

错误处理与空结果语义

  • 参数错误:返回usage(...),退出码为 2(测试TestExecute_ClassroomValidationErrorsTestExecute_ClassroomListInvalidMaxFailsBeforeService中,参数类错误均断言ExitCode(err) != 2);
  • API 错误:统一wrapClassroomError包装,保留 API 原始错误信息并附上下文;
  • 找不到邀请:由 Classroom API 返回404类错误,同样经包装后以非零退出码呈现(注意getlist --fail-empty的"无结果"语义不同:list可用--fail-empty以退出码 3 表达空结果,而get对不存在的 ID 直接走 API 错误路径)。

测试佐证

仓库测试明确覆盖了该命令的端到端调用路径:

  • internal/cmd/execute_classroom_more_commands_test.go 中依次验证了listgetcreate三个子命令的 JSON 执行(runJSON("classroom", "guardian-invitations", "get", "s1", "gi1"));
  • internal/cmd/classroom_presentation_test.go 验证了邀请的列表展示列:INVITATION_IDEMAILSTATECREATED(展示定义见 internal/cmd/classroom_presentation.go),与get纯文本输出的字段口径一致;
  • internal/cmd/dryrun_e2e_test.go 中 dry-run 操作码统一为classroom.guardian-invitations.create,说明邀请的创建会走 dry-run 防护,而get属只读操作不受影响。

与兄弟命令的组合使用

get通常与guardian-invitations组的其他命令配合:

  • gog classroom guardian-invitations list:按学生分页列出邀请,支持--email--state(逗号分隔的PENDING,COMPLETE)、--max/--page/--all分页;先用它拿到INVITATION_ID,再精确get
  • gog classroom guardian-invitations create:为指定学生向某邮箱发起邀请(--email必填);创建后即可用get回查邀请状态,形成"创建→确认→跟踪"闭环;
  • 父命令入口 gog classroom 与完整命令索引 docs/commands/README.md 提供全量上下文。

一个典型巡检场景示例:

# 列出学生 s1 名下所有待处理邀请,逐条查看详情 gog classroom guardian-invitations list s1 --state PENDING --json | \ jq -r '.invitations[].invitationId' | while read -r gid; do gog classroom guardian-invitations get s1 "$gid" --plain done

(此处假设环境中可用jq做管道处理;纯gog单命令场景可直接get单条。)

总结

gog classroom guardian-invitations get <studentId> <invitationId>是 gogcli 面向 Classroom 监护人邀请场景提供的精确只读查询入口:两个必选位置参数、info/show别名、TSV 与 JSON 双输出模式,底层直连userProfiles.guardianInvitations.getAPI,并通过统一参数校验与错误包装保证脚本可预期的退出行为。配合guardian-invitationslistcreate,足以覆盖"邀请创建—查询—状态跟踪"的完整运维链路;配合全局--json--no-input--account等标志,可无缝嵌入 CI 巡检与自动化工具。

【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

立即咨询