使用 Go Worker 检查网站 是一门面向准备学习并发协调的 Go 学习者的实践项目课。你将帮助活动组织者在开放前检查准备好的本地网站入口,编写可复用命令,发出真实 HTTP 请求,并为每项任务保存一条如实反映结果的 JSON 记录;共享同一 URL 的不同任务也分别保留。
两个引导实验先完成单目标检查,再通过小型 worker 池分配任务。一个独立挑战检查另一组活动入口,worker 数量上限改为三。每个单元都有自己的环境和数据。预计约需 155 分钟;这是包含阅读和普通纠错的作者估计。
你将学到什么
完成本课程后,你将能够:
- 保留每项任务的 ID 和原始 URL,即使其他任务失败也为它生成且只生成一条结果;
- 区分 HTTP 拒绝、内容不符、连接错误和超时,包括读取响应体时发生的失败;
- 为 HTTP 请求设置有限的客户端超时,并关闭收到的响应体;
- 使用 goroutine 和 channel 分配任务,解释 channel 的关闭责任,并通过
sync.WaitGroup等待 worker; - 汇总结果时避免并发写入共享集合,并观察不超过 worker 上限的真实重叠请求;
- 保存、阅读完整 JSON 报告,接受不同完成顺序,并处理空输入和任务少于 worker 的情况。
本课程适合谁
本课程适合希望把熟悉的函数和数据结构组合成实用并发命令行工具的 Go 学习者。
前置要求: 基本终端导航、Go 函数、结构体、切片、模块、基础 channel 语法,以及构建失物招领 API或同等 HTTP 经验。实验会在使用前解释 goroutine、channel 关闭责任、sync.WaitGroup、客户端超时和响应体清理。
学习环境: LabEx 提供 Go、起始代码、受控的本地 HTTP 目标和浏览器中的 WebIDE。通过 Workspace 终端运行检查程序并阅读 JSON 报告,无需本地安装 Go。命令、目标内容和程序输出保留英文。
常见问题
我会扫描公开网站吗?
你只检查准备好的本地目标,它们的延迟均有限。这是一次性检查工具;持续监控、告警以及对任意互联网条件的保证不在项目范围内。
一个目标失败会停止其他检查吗?
每项输入任务都必须得到自己的结果。服务器的 HTTP 拒绝与连接错误不同。达到配置的超时后,客户端会停止等待慢响应;目标服务器可能稍后才完成处理。收到响应时,报告会保留 HTTP 状态。
挑战中有什么变化?
任务 ID、URL 和预期内容会变化,worker 上限变为三。你将复用引导实验中练习过的机制。结果可以按任意顺序到达,但仍须覆盖全部任务并遵守并发上限。

