用Golang开发轻量级翻译CLI工具的关键是选简单API、处理文本边界、设计简洁命令行。推荐使用DeepL或Google Translate的公开接口,避免复杂鉴权;通过flag包实现-t、-s、-f等基础参数,支持文件和stdin输入;利用net/http发起请求,goquery或json解析响应;预处理文本去空格换行,译后清洗多余空白;设置8秒超时,统一错误提示,失败时返回原句加警告标识;最终编译为单文件二进制,直接放入PATH运行,无需依赖环境。

用 Golang 写一个轻量级翻译 CLI 工具不难,关键在三点:选对 API、处理好文本边界、命令行交互要干净。下面直接说怎么落地。
选一个简单可用的翻译 API
推荐用 DeepL Free API(通过网页模拟) 或 Google Translate 的公开端点(非官方但稳定)。不建议一开始就对接需要 OAuth 或复杂鉴权的商业 API(比如 Azure Translator),会拖慢验证节奏。
- DeepL 的免费接口可通过 POST 到
https://www.deepl.com/translator模拟表单提交,带form data参数(如text、source_lang、target_lang),返回 HTML 后用goquery提取译文 - Google 翻译可调用
https://translate.google.com/translate_a/single,参数精简(client=gtx&sl=auto&tl=zh&dt=t&q=hello),响应是 JSON 数组,解析成本低 - 避免用需申请 key 的服务(如百度翻译),除非你明确要长期维护或商用——CLI 工具第一目标是“跑起来”,不是“合规上线”
用 flag 包搭出干净的 CLI 接口
不用引入 cobra 这类重型框架。Golang 自带的 flag 足够支撑基础需求:
-
-t zh指定目标语言(默认 en) -
-s auto指定源语言(默认 auto) -
-f file.txt支持文件输入(比粘贴长文本更实用) - 无参数时从 stdin 读(
echo "hello" | translate这种管道流支持)
示例片段:
立即学习“go语言免费学习笔记(深入)”;
var (
targetLang = flag.String("t", "en", "target language code")
sourceLang = flag.String("s", "auto", "source language code")
filePath = flag.String("f", "", "input file path")
)
flag.Parse()
text := readInput(*filePath) // 自定义函数,优先读文件,其次 stdin文本预处理与后处理不能省
用户输入往往带空行、多余空格、控制字符。不做清洗,API 可能返回异常或截断:
- 输入前:用
strings.TrimSpace去首尾空白;用strings.ReplaceAll(text, "\r\n", "\n")统一行尾 - 翻译后:译文可能含多余换行或空格,用正则
regexp.MustCompile(`\n\s*\n`)合并段落空行 - 特别注意:中英混排时,Google API 对中文标点(如“,”、“。”)识别稳定,但 DeepL 在纯中文短句上更准——可在工具里加个
-e deepl切换引擎
错误处理要静默友好
CLI 不该崩,也不该堆栈溢出。网络失败、超时、API 返回非 200、JSON 解析失败……都统一转成提示语:
- 超时设为 8 秒(
http.Client{Timeout: 8 * time.Second}),太短易失败,太长用户没感知 - HTTP 错误码 429 就提示 “Too many requests. Try again later.”,别暴露 header 或 raw body
- 解析失败时 fallback 到原句 + ⚠️ 标识,例如:
"hello" → "hello [translation failed]"
基本上就这些。核心逻辑不到 200 行,编译成单二进制,扔进 $PATH 就能用。不需要数据库、不用后台进程、不依赖 Node 或 Python——这才是 CLI 的轻量本意。










