Golang聊天室机器人分三层:WebSocket/TCP收消息、关键词规则判意图、自动构造回复发回;用goroutine+channel管理连接与广播,辅以限速、日志、退出指令等实用细节。

用 Golang 开发一个能自动回复消息的简易聊天室机器人,核心不在于堆功能,而在于理清“谁来收、谁来判、谁来发”这三层逻辑。它不需要大模型或训练,靠结构化规则 + 轻量 API 就能跑起来,适合快速验证或嵌入内部工具。
明确通信方式:选 WebSocket 还是 TCP?
WebSocket 更贴近真实场景,支持浏览器直连、消息实时双向、断线重连友好;TCP 则更底层、适合学习并发模型或内网轻量服务。
- 对外提供网页版聊天室 → 用 gorilla/websocket,前端 JS 可直接 new WebSocket() 接入
- 只做命令行测试或内网服务 → 用 net 包搭 TCP 服务,用 telnet 或 nc 测试即可
- 若需微信端自动回复(比如客服号),可用 openwechat 库监听消息并调用 reply 方法,但注意微信协议有登录限制和风控
设计自动回复逻辑:规则匹配比 NLP 更快更稳
初期不用接入大模型,用字符串匹配 + 简单关键词提取就足够覆盖 80% 常见问题。例如:
- 用户发 “你好”、“hi”、“hello” → 回复 “你好!我是小助,可以帮你查时间、记备忘、或者讲个冷笑话~”
- 包含 “时间”、“现在几点” → 用
time.Now().Format("2006-01-02 15:04:05")拼字符串返回 - 以 “/memo ” 开头 → 提取后面内容存进 map 或内存变量,下次发 “/list” 就返回所有备忘
避免正则滥用,优先用 strings.Contains、strings.HasPrefix 和 strings.Fields 切分处理,响应更快、调试更直观。
立即学习“go语言免费学习笔记(深入)”;
管理连接与广播:用 goroutine + channel 协调不卡顿
每个客户端连接启动两个 goroutine:一个读、一个写。中间靠一个全局 broadcast channel 中转消息,由单独的广播 goroutine 统一分发。
- 读 goroutine:收到消息后先交给自动回复函数处理,再把结果塞进 broadcast 通道
- 写 goroutine:从 broadcast 读出消息,遍历当前所有活跃连接,逐个
WriteMessage - 注册/注销统一走 channel(如
register chan *Client),避免 map 并发写 panic
加一点实用细节让体验更顺
上线前补几个小点,能明显降低维护成本:
- 给每条自动回复加简单日志:
log.Printf("[auto] %s → %s", user, reply),方便排查误触发 - 限制单用户每秒最多发 3 条,防刷屏 —— 用
time.AfterFunc或带缓冲的 channel 实现速率控制 - 支持退出指令,比如用户发 “/quit”,服务端主动
conn.Close()并清理状态 - 如果走 WebSocket,前端可加心跳保活(每隔 30 秒 send ping),后端用
SetPingHandler响应










