在命令行中向 go 程序传递包含 `&`、`?`、`=` 等 shell 元字符的 url 时,若未加引号,shell 会提前解析这些符号(如将 `&` 视为后台运行、`?` 视为通配符),导致程序接收截断或错误的参数,并出现进程分叉、”done”提示等异常输出。
当你在终端执行类似以下命令时:
gophers -github_url=https://github.com/search?utf8=%E2%9C%93&q=location%3A%22San+Fransisco%22+location%3ACA+followers%3A%3E100&type=Users&ref=advsearch&l=
Bash(或 macOS 默认的 zsh)会将 & 解释为后台任务分隔符,把整个命令拆分为多个并行子命令:
- gophers -github_url=https://github.com/search?utf8=%E2%9C%93
- q=location%3A%22San+Fransisco%22+location%3ACA+followers%3A%3E100
- type=Users
- ref=advsearch
- l=(空值)
因此你看到的 [1] 51873、[2] Done 等输出,其实是 Shell 启动的多个后台作业状态,而非 Go 程序本身的日志 —— 你的程序甚至可能根本没有收到完整 URL。
✅ 正确做法:始终用单引号或双引号包裹含特殊字符的 URL