gog-docs 技能指南用 gog CLI 安全操控 Google Docs 的完整命令体系【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli导读本文围绕 gog 开源项目中的gog-docs技能文档.agents/skills/gog-docs/SKILL.md系统梳理 gog CLI 面向 Google Docs 的完整操作能力从只读安全起步、49 个文档子命令的用途索引到 Markdown 写入、文本/段落格式化、原生表格、页眉页脚、Tabs 与智能芯片等结构化编辑再到--readonly、--dry-run、--wrap-untrusted等 Agent 安全护栏。读完本文你将掌握如何像操作本地文件一样在终端中安全、可脚本化地创建、读取、编辑与导出 Google Docs并理解每个命令背后的 Docs API 调用原理与源码实现位置。技能定位gog-docs 是什么gog-docs是 gog 仓库中为 AgentLLM 自动化准备的技能包之一其定义位于 .agents/skills/gog-docs/SKILL.md配套的 Agent 接口声明在 .agents/skills/gog-docs/agents/openai.yamldisplay_name: gog Google Docs默认提示词为Use $gog-docs to perform this Google Docs task safely.。技能文档开篇给出了三条核心约定先读共享规则使用本技能前必须先阅读 .agents/skills/gog/SKILL.md其中定义了全局的认证auth、输出output、安全safety与实时写入live-write规则不猜命令语法所有命令的运行参数以gog docs command --help与gog schema docs command --json为准文件由脚本生成该 SKILL.md 由 scripts/gen-agent-skills.mjs 生成不应手工编辑。从源码结构看Google Docs 功能是 gog 中命令最多的域之一入口聚合在 internal/cmd/docs.go 的DocsCmd结构体实现散布在 internal/cmd 下数十个docs_*.go文件中如 docs_read.go、docs_mutation.go、docs_sed.go 等驱动层基于 Google Docs API v1。Safe start三行命令完成安全起步SKILL.md 给出的安全起步模板适合任何首次对接 Google Docs 的场景gog auth list --check --json --no-input gog schema docs --json gog --readonly --account userexample.com docs cat DOCUMENT_ID --json --wrap-untrusted三条命令各司其职命令作用适合场景gog auth list --check --json --no-input检查本地认证状态哪些账号有效、各自授予的服务范围非交互失败脚本/Agent 执行任何 API 操作前的健康检查gog schema docs --json输出docs服务的完整机器可读命令契约语法、参数、退出码、安全状态程序化生成命令、校验参数gog docs cat docId --json --wrap-untrusted只读地把文档内容以 JSON 输出并对外部 Google 内容加 untrusted 包裹标记Agent 读取文档正文对应的安全铁律从 .agents/skills/gog/SKILL.md 继承并适用于 Docs显式选账号始终用--account指定账号避免默认账号误用Agent 可解析输出读取 Google 内容一律使用--json --wrap-untrusted只读优先任务不允许改动 Google 数据时加--readonly运行时拦截所有变更类 API 请求非交互与演练自动化中加--no-input受支持的写入前先加--dry-run写前确认任何写/删操作前确认账号、对象 ID 与确切变更内容。--readonly、--dry-run、--no-input均为全局根级 flag定义于 docs/commands/gog-docs.md 的 Flags 表中如-n/--dry-run/--noop/--preview打印预期动作并成功退出、--readonly同时让auth add只申请只读 OAuth scope、--wrap-untrusted在 JSON/raw 输出中把抓取的文本字段包上外部不可信内容标记。命令全景49 个 docs 子命令速查表SKILL.md 给出了gog docs的完整子命令索引下文原样继承并补充了别名与关键 flag 说明源码依据 internal/cmd/docs.go 中的 kong 声明命令用途常用别名 / 关键说明add-tab向文档添加一个 Tabgog docs add-tab docId --title Notescat以纯文本打印文档别名text、read支持--tab、--all-tabs、-N/--numbered、--max-bytes默认 20000000 为不限、--raw、--chipscell-style应用表格单元格/边框/内边距/对齐/文本样式—cell-update替换或追加指定表格单元格内容别名update-cell坐标 1 基--format markdown可渲染 Markdown 列表clear清空文档全部内容破坏性操作需--forcecomments管理文件评论含list --locate、locate、poll、resolve等子命令copy复制文档别名cp、duplicate底层走 Drive Files.copycreate创建文档别名add、new--file可直接导入 Markdown含公网 HTTPS 图片alt {widthN heightN}控制尺寸--pageless创建即设无页模式delete从文档中删除文本区间支持--at text锚点定位、--segment精确到页眉/页脚段delete-tab删除一个 Tab需--forceedit查找并替换文本旧版路径更推荐find-replace与sedexport导出文档pdf|docx|txt|md|html别名download、dl默认 pdf经 Drive 导出--tab可实验性按 Tab 导出find-range查找文本并输出 Docs API UTF-16 索引区间供底层编辑组合使用注意 emoji 等非 BMP 字符占 2 个 UTF-16 单元find-replace查找替换支持纯文本或带图片的 Markdown--first仅替换首个--content-file--format markdownfooter列出/创建/删除页脚别名footers创建返回segmentIdformat应用文本或段落格式--match/--match-all定位支持字体、字号、颜色、对齐、行距、列表、链接、缩进、keep 控制等header列出/创建/删除页眉别名headersheadings列出文档标题--level过滤JSON 含headingId可拼#headingid文档 URLimages列出文档图片输出 image object ID 与 alt 文本供replace-image使用info获取文档元数据别名get、show只读documentId,title,revisionId等insert在指定位置插入文本支持--at text、--index、--segment、--markdown块级插入insert-date-chip插入原生日期智能芯片smart chip 类insert-file-chip插入原生 Drive 文件智能芯片别名insert-rich-linkinsert-footnote插入并填充脚注两步操作API 先返回 segmentId 再填文本不支持--batchinsert-horizontal-rule插入段落下边框式水平线别名insert-hr、hrAPI 无原生水平线用底部段落边框实现insert-image插入公网图片 URL 或本地上传图片--url不改变 Drive 权限--file上传到 Drive 可能需要链接共享insert-page-break在指定位置插入分页符别名page-break、pb--at-end追加到文末--index精确插入insert-person插入原生人员智能芯片--email--atinsert-section-break插入连续或下一页分节符--type next-pageinsert-table插入原生表格--rows x --cols、--values-json填充 2D 字符串数组、--at-end/--index Nlist-tabs列出文档全部 Tab先用它发现 tab 标题/ID再--tab定位named-range管理命名区间别名named-ranges、namedranges、nrcreate/list/replace/deleteTab 感知page-layout设置分页模式pageless|pages别名set-page-layout、page-setup尺寸默认点支持 pt/in/cm/mmparagraphs列出文档段落含isEmpty、text run 的 UTF-16 区间、样式、链接元数据raw输出完整 Docs API JSONDocuments.Get无损--pretty美化--tab投影单 Tab--all-tabs输出递归 tabs 树rename-tab重命名 Tabgog docs rename-tab docId tabId Archivereplace-image不改变位置/边界替换既有图片--object-id或--match-alt目标 Tab 只有一张图时可省略选择器section-columns设置文档节栏数Docs 支持 1–3 栏--count 1复位单栏sedsed 风格正则替换s/pattern/replacement/g支持表格、图片、批量与 dry-run见 internal/cmd/docs_sed.gostructure以编号段落展示文档结构别名structsuggestions列出待处理文本建议suggested edits只读含插入/删除类型、UTF-16 区间、文本与段落table-column插入/删除原生表格列--table支持 1 基索引、负索引、首格文本、*全表table-column-width设置/重置表格列宽--width用点且必须配--col--evenly-distributed等宽分布table-merge合并表格单元格矩形区间--range 1,1:1,3table-row插入/删除/样式/固定表格行含--values-json单行填充、pin表头行table-unmerge取消包含指定单元格的区域合并别名table-splittables列出原生表格list输出稳定元素索引与 Docs API 位置tabs管理文档 Tab 的聚合入口list/add/rename/delete 四子命令update在指定索引/区间插入或替换文本支持--at、--index、--replace-range START:END、--markdown、--segmentwrite向文档写入内容--append/--replace、--markdown、--text/--file/--content-file、--tab、--check-orphans、列表/段落/页面版式 flag 全家桶SKILL.md 的结语规则同样重要gog docs command --help查看 flaggog schema docs command --json查看机器可读契约不要猜测命令语法。读取与发现只读是默认姿势纯文本与结构化读取最常用的读取命令是docs cat其实现位于 internal/cmd/docs_read.go。核心 flag 包括gog docs cat docId # 纯文本 gog docs cat docId --json --wrap-untrusted # Agent 友好 JSON gog docs cat docId -N # 段落编号 gog docs cat docId --tab Notes # 读取指定 Tab gog docs cat docId --all-tabs # 全部 Tab带标题头 gog docs cat docId --raw # 原始 API JSON gog docs cat docId --chips # 内联渲染智能芯片/文本链接注意--tab与--all-tabs互斥源码在 docs_read.go 做了显式校验空--tab会被拒绝而非静默回退。--max-bytes默认 2,000,000 字节防止超大文档撑爆内存。元数据、结构与元素发现元数据gog docs info docId返回id、name、mimeType、webViewLink、revisionId实现中通过Fields(documentId,title,revisionId)限制传输量internal/cmd/docs.go。内容清单docs tables list、docs images list、docs headings list、docs paragraphs list四命令均支持--tabJSON 输出含稳定元素索引与 Docs API 位置--plain输出无表头 TSV 便于 shell 管道。无损原始输出gog docs raw docId --pretty直接输出Documents.Get的完整响应无 Fields 限制专为脚本与 LLM 消费设计——它保留info会丢弃的表格、建议、逐 run 样式、列表嵌套、命名区间与内联对象。internal/cmd/docs.go 注释明确指出其语义lossless; for scripting and LLM consumption。待处理建议gog docs suggestions list docId只读地请求 Google 的 inline suggestions 视图报告建议 ID、插入/删除类型、UTF-16 区间、文本与所在段落当前刻意排除纯样式建议与接受/拒绝变更。查找定位UTF-16 索引是底层编辑的坐标Docs API 的所有区间都用UTF-16 码元索引表示。docs find-range帮你把字面文本解析成精确坐标gog docs find-range docId Release status --json gog docs find-range docId Owner --all --tab Plan --plain gog docs find-range docId Quarterly --segment $header_id --json关键约束emoji 等非 BMP 字符占用 2 个 UTF-16 单元返回的索引可直接用于 Docs API 区间不要用字节或 rune 偏移重算。直接定位类命令insert、update、delete、insert-person、insert-page-break都支持--at text字面锚点配合--occurrence N处理重复文本、--match-case区分大小写gog docs insert docId Prefix: --at Release status gog docs update docId --at Draft --text Ready gog docs delete docId --at Remove me写入与 Markdown 渲染从文本到格式化文档基础写入docs write支持三种内容来源--text/--file path/-读 stdin与两种写入模式--append追加、--replace整体替换gog --account userexample.com docs write docId --append --text ... gog --account userexample.com docs write docId --replace --markdown --file report.md gog --account userexample.com docs write docId --append --tab Data --markdown --replace --file data.md--markdown会调用项目自研的本地 Markdown 渲染器而非 Drive 的整文档转换把 Markdown 转成 Docs 原生格式。根据 docs/docs-editing.md渲染器特性包括标题紧跟其后正文、行内替换不破坏原段落除非替换以换行结尾、替换前重置继承样式、表格单元格内支持 HTMLbr变体、围栏代码块使用 Roboto Mono 深绿色文本 段落底纹。精确区间写入docs update提供更细粒度的控制START:END是 Google Docs UTF-16 API 区间必须通过docs cat --raw、docs raw或其它documents.get回读解析禁止猜测索引gog docs update docId --replace-range START:END --text replacement gog docs update docId --replace-range START:END --markdown --file block.md gog docs update docId --at Draft --text Ready # 字面锚点 gog docs update docId --tab Data --markdown --file block.md注意--replace-range与--index互斥。insert --markdown则只插入不删除适合在解析位置追加整块 Markdown。孤儿评论保护写替换--replace --markdown前可加--check-orphans做离线预检若替换会吞掉当前处于打开状态的评论引用文本quote命令以退出码 11 在变更前中止。预检复用docs comments locate的实体与空白匹配规则跳过已解决、无引文与已孤儿化的评论--tab模式下只检查被替换 Tab 中的评论JSON 输出在wouldOrphan字段中给出受影响的评论。格式化文本、段落、列表与链接文本与段落格式docs format docId --match 文本支持全部文本与段落属性gog docs format docId --match Status --bold --font-size 18 gog docs format docId --match Action item --text-color #b00020 gog docs format docId --match Heading --alignment center --line-spacing 120 gog docs format docId --match Summary --indent-start 24 --indent-first-line 12 gog docs format docId --match Summary --space-above 6 --space-below 12 --keep-with-next标题样式可用--heading-level N1..6 快捷方式或--named-style NAME完整枚举NORMAL_TEXT、TITLE、SUBTITLE、HEADING_1..HEADING_6大小写不敏感二者都写paragraphStyle.namedStyleType可与--alignment、--line-spacing组合gog docs format docId --match Status --heading-level 2 gog docs format docId --match Overview --named-style title --alignment center布尔 keep 控件有对应的--no-...清除形式--spacing-mode接受 Docs API 值NEVER_COLLAPSE与COLLAPSE_LISTS。--match-all用于格式化所有匹配出现。docs write的纯文本模式接受同一套列表/段落 flag。原生列表创建或移除原生列表可指定精确的字形预设gog docs format docId --match Action item --bullets # 默认 disc 圆点 gog docs format docId --match Step one --ordered # 默认 decimal 编号 gog docs format docId --match Task --bullet-preset BULLET_CHECKBOX # 复选框列表 gog docs format docId --match Action item --no-bullets # 移除docs write的 flag 表中也列出了--bullets、--ordered、--bullet-preset、--no-bullets。--append模式下若要先建列表再排段落建议在随后的docs format调用中应用段落布局让 Docs 先解析插入后的索引。链接gog docs format docId --match Project site --link https://example.com gog docs format docId --match Project site --no-link--link接受 HTTP(S)、mailto:、书签 ID 与同文档标题锚点 slug--link与--no-link互斥。原生表格插入、单元格、行列与合并Markdown 渲染的表格与 Docs 原生表格存在差异需要保证原生表格时应使用直接表格命令。插入表格gog docs insert-table docId --rows 3 --cols 2 --at-end gog docs insert-table docId --rows 2 --cols 2 --index 1 \ --values-json [[A,B],[C,D]]--values-json接受 2D 字符串数组维度必须与--rowsx--cols一致省略则插入空表格结构。--at-end追加到文档或指定--tab末尾--index N精确插入。单元格级编辑gog docs cell-update docId --table-index 1 --row 2 --col 3 \ --content **Ready** --format markdown gog docs cell-update docId --table-index 1 --row 2 --col 3 \ --content $- First\n- Second坐标为 1 基--tab定位 Tab--append追加到单元格末尾而非替换。Markdown 列表内容会在单元格内生成原生 Docs 项目符号/编号含嵌套层级Markdown 表格导入也保留同样的嵌套列表结构。行列结构操作gog docs table-row insert docId --table 2 --at end gog docs table-row insert docId --table Status --at 2 \ --values-json [Ready,Owner] gog docs table-row delete docId --table -1 --row 3 gog docs table-column insert docId --table 1 --at 2 gog docs table-column delete docId --table * --col -1--table选择器非常灵活1 基索引、从末尾计的负索引、精确首格文本、或*表示全部表格数字或类语法文本前加text:前缀如--table text:2026首格文本匹配必须唯一。行列索引均为 1 基且可为负数--at end追加。所有直接表格变更命令都接受--tab、--dry-run、--json、--plain多表变更会预检并在 Docs API 批量上限内保持文档降序。列宽与合并gog docs table-column-width docId --table-index 1 --col 1 --width 120 gog docs table-column-width docId --table-index 1 --evenly-distributed gog docs table-merge docId --table 1 --range 1,1:1,3 gog docs table-unmerge docId --table 1 --cell 1,1--width以点为单位且必须配--col--evenly-distributed在给出--col时只重置该列否则等宽分布全部列。行列结构操作会拒绝非矩形 API 表格形态避免合并单元格场景下的猜测性引用扩大变更范围相关测试见 docs_table_ops_test.go、docs_insert_table_test.go。图片与智能芯片富媒体内容插入与替换图片# 公网 URL 直接插入不改变 Drive 权限 gog docs insert-image docId --url https://example.com/chart.png --at end # 本地上传 PNG/JPEG/GIF会临时上传到 Drive可能需要链接共享 gog docs insert-image docId --file chart.png --at Quarterly chart # 替换既有图片而不改位置/边界 gog docs replace-image docId --object-id imageObjectId --url https://example.com/chart.png gog docs replace-image docId --match-alt Quarterly chart --file chart.png图片的 object ID 与 alt 文本来自docs images list所选 Tab 恰好只有一张图片时replace-image可省略两个选择器。锚点行为--at text会删除并替换首个字面文本匹配--before text/--after text则保留锚文本。智能芯片与页眉页脚gog docs insert-person docId --email ownerexample.com --at owner gog docs insert-file-chip docId --file-id driveFileId --at 附件 gog docs insert-date-chip docId --at 截止页眉页脚使用header/footer聚合命令创建返回segmentId供后续定位header_id$(gog docs header create docId --text Quarterly report --json | jq -r .segmentId) gog docs header list docId --json gog docs footer create docId --file footer.txt gog --force docs header delete docId $header_id--segment接受 create/list/raw 返回的不透明 ID不要加header:或footer:前缀可配合--tab在多 Tab 文档中限定查找。注意当前 Docs API 只能创建DEFAULT页眉/页脚raw 输出暴露的首页与偶数页 ID 是只读的段内插入/更新仅支持纯文本Markdown 中的表格、图片等结构在页眉/页脚/脚注中非法。结构元素分页符、分节符、脚注、水平线与多栏Markdown 没有原生分页符/分节符/水平线概念多页交付物需要直接调用 Docs APIgog docs insert-page-break docId --at-end gog docs insert-page-break docId --index 250 --tab Notes gog docs insert-footnote docId --at Claim --text Source note gog docs insert-section-break docId --at Appendix --type next-page gog docs insert-horizontal-rule docId --at Summary三类结构插入共用同一组放置选择器--index、--at、--occurrence、--match-case、--at-end、--tab。实现细节值得注意脚注是两步操作——API 先返回新脚注段 ID 才能填充文本因此不支持持久化--batch模式水平线用换行 底部段落边框实现因为 Docs API 没有原生的水平线插入请求源码见 docs_sed.go 相关段落与 docs_insert_page_break_test.go 测试。分节栏数Google Docs 支持 1–3 栏gog docs section-columns docId --at Newsletter --count 2 gog docs section-columns docId --at-end --count 3 --separator between gog docs section-columns docId --at Appendix --count 1 # 复位单栏Tabs 与命名区间现代 Docs 的组织方式Tab 管理gog docs list-tabs docId # 发现 tab 标题/ID gog docs add-tab docId --title Notes gog docs rename-tab docId tabId Archive gog docs delete-tab docId tabId --force几乎所有编辑命令都支持--tab按标题或 ID例如gog docs write docId --append --tab Notes --text Follow-up、gog docs find-replace docId old new --tab Notes --dry-run。整 Tab 重渲染的推荐姿势是把 Markdown 作为唯一事实来源gog docs write docId --replace --markdown --tab Gold list --file gold.md原理docs/docs-editing.md 明确说明Drive 的 Markdown 转换器只能整文档操作所以该路径用DeleteContentRange清空目标 Tab 再经 Docs API 本地重渲染 Markdown其他 Tab 不受影响。命名区间命名区间是持久的文档锚点可基于匹配文本或显式 Docs API 索引创建gog docs named-range create docId --name ReleaseStatus --at Ready to ship gog docs named-range create docId --name ReleaseStatus --start 42 --end 55 gog docs named-range list docId --json gog docs named-range replace docId ReleaseStatus --text Released gog docs named-range delete docId ReleaseStatus命名区间命令是 Tab 感知的不带--tab时作用于默认 Tab且即便文档还有其它 Tab 也能正确限定变更范围相关测试见 docs_named_ranges_test.go。查找替换与 sed三种替换武器docs find-replace字面替换支持--dry-run完全离线不开文档即报告预期替换、空替换串删除匹配、--first单次、--content-file--format markdown用 Markdown含图片替换占位符。docs edit经典查找替换入口。docs sedsed 风格正则s/pattern/replacement/g是 Docs 域中最庞大的实现之一——internal/cmd 下以docs_sed_*.go命名的文件超过 30 个覆盖解析、表格单元格、图片替换、批量batch、dry-run、模糊测试与 live 测试如 docs_sed_fuzz_test.go、docs_sed_live_test.go适合在超长文档中做模式化批量改写。gog docs find-replace docId old new --dry-run gog docs find-replace docId old --first gog docs find-replace docId PLACEHOLDER --content-file replacement.md --format markdown页面布局与导出分页/无页模式与页面尺寸gog docs page-layout docId --layout pageless gog docs page-layout docId --layout pages --page-width 8.5in --page-height 11in \ --margin-left 0.5in --margin-right 0.5in gog docs write docId --replace --markdown --file report.md --pageless --page-width 960长度默认用点pt也接受in、cm、mm。docs page-layout只给尺寸/边距时不改当前分页模式要切换才需要--layout--pageless除非显式给--page-width否则保留 Docs 现有宽度。docs write的 flag 中还提供--page-size A4|A5|Letter|Legal|Tabloid、--page-width/--page-height/--margin-*等页面级配置见 docs/commands/gog-docs-write.md。导出gog docs export docId --format pdf # 默认 pdf gog docs export docId --format docx --out report.docx gog docs export docId --format md --tab Notes # 实验性按 Tab 导出 gog docs export docId --format html --overwrite--format支持 pdf|docx|txt|md|html经 Drive 导出实现源码中DocsExportCmd的 Run 走exportViaDrive见 internal/cmd/docs.go--overwrite覆盖既有输出文件。create命令通过 DriveFiles.CreateMedia(text/markdown)让 Drive 做格式转换随后进行第二遍图片插入先建占位符再替换为内联图片见 internal/cmd/docs.go。命令发现与 Schema 契约SKILL.md 反复强调不要猜测语法项目为此提供了三件套gog docs --help # 服务级帮助全部子命令索引 gog docs command --help # 子命令 flag 详情 gog schema docs command --json # 机器可读契约语法、退出码、有效安全状态配套的人类可读文档包括 docs/index.md、docs/commands/README.md、docs/agent-skills.md 与 docs/safety-profiles.mdGoogle Docs 的深度编辑专题见 docs/docs-editing.md。生成式命令文档位于 docs/commandsgog-docs-*.md由make docs-commands从gog schema --json生成。源码与测试佐证功能可信度命令注册internal/cmd/docs.go 的DocsCmd结构体一次性声明全部 49 个子命令及别名export→download,dl、cat→text,read、copy→cp,duplicate、insert-page-break→page-break,pb、named-range→named-ranges,namedranges,nr等读取实现internal/cmd/docs_read.goDocsCatCmd含--max-bytes上限与--raw原始 JSON 分支写入实现docs_write_*.go系列docs_write_file_test.go、docs_write_markdown_tab_test.go 等验证 Markdown 写入与 Tab 定位表格操作docs_table_*系列测试覆盖插入、单元格、列宽、合并与多表偏移docs_insert_table_test.go、docs_table_ops_test.go、docs_multi_table_offset_test.gosed 正则引擎docs_sed_*三十余个文件含模糊测试与实时测试智能芯片docs_smart_chips.goperson/file/date chip页眉页脚docs_header_footer.go 与对应测试 docs_header_footer_test.go评论系统docs_comments*.golocate/poll/list/resolve含--tab过滤语义。总结把 Docs 变成可编程对象gog-docs技能把 Google Docs 从网页编辑器降维成一组可脚本化、可审计、对 Agent 友好的终端命令读取侧有纯文本、JSON、无损 raw 三种视图写入侧有文本、Markdown、原生表格、结构化插入四种粒度安全侧有--readonly、--dry-run、--no-input、--wrap-untrusted、--check-orphans与命令白名单多重护栏。配合gog schema docs --json的机器契约Agent 可以在不猜测语法的前提下完成创建 → 写入 → 格式化 → 审查 → 导出的完整文档生命周期而每次变更都可通过docs raw与版本回读进行验证。延伸阅读gog-docs 技能定义gog 全局技能与安全规则Google Docs 深度编辑指南gog docs 命令索引安全配置文档无损原始 API 输出说明【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考