文章目录
- gotd/td:用 Go 写的 Telegram 客户端库
- 1、这东西解决什么问题
- 2、核心能力
- 3、怎么用
- 4、测试和质量
- 5、适合谁用
gotd/td:用 Go 写的 Telegram 客户端库
gotd/td 在 GitHub 上拿到 2,262 Star。
这是一个纯 Go 实现的 Telegram MTProto API 客户端,支持用户账号和 Bot。不用 CGO,不用调 C 库,整个协议栈都在 Go 里跑。
1、这东西解决什么问题
想用 Go 跟 Telegram 交互,过去的选择不多。要么调 TDLib 的 C 接口,要么用封装好的第三方 SDK,底层协议细节被藏起来,出了问题很难排查。
gotd/td 把 MTProto 2.0 协议完整用 Go 实现了一遍。生成的代码覆盖 Telegram 全部 API 类型和方法,能直接调用任何 MTProto 接口。协议层、传输层、加密层全部透明,出了问题可以直接定位到具体的数据包。
2、核心能力
内存占用很低,每个空闲客户端大约 150KB,能同时跑几千个连接。代码由gotdgen工具从 Telegram 官方 schema 自动生成,类型定义里嵌着官方文档链接,查 API 的时候不用来回切换页面。
会话存储是可插拔的,支持断线重连和心跳保活。Telegram 的公钥也内置在库里,会跟着上游更新。传输层支持 WebSocket,能在 WASM 环境里跑。
认证流程封装得比较完整。用户登录有auth.Flow处理验证码交互,Bot 登录一行代码搞定。2FA 和 MTProxy 也都支持。
文件上传下载有专门的 helper,大文件支持多流并发和进度回调。消息发送有 builder 模式,支持文本样式。查询接口带分页辅助。中间件层可以加限流和 FLOOD_WAIT 自动处理。
3、怎么用
安装:
go get github.com/gotd/td最简单的用法:
client:=telegram.NewClient(appID,appHash,telegram.Options{})iferr:=client.Run(context.Background(),func(ctx context.Context)error{api:=client.API()// 现在可以调用任意 MTProto 方法returnnil});err!=nil{panic(err)}也可以用 JSON 格式直接调用方法,传入带@type字段的 JSON 请求,拿回 JSON 响应,省去构造 Go 结构体的步骤。
4、测试和质量
这个库的测试做得比较扎实。CI 里有端到端测试,直接跑真实 Telegram 服务器。还有一套纯 Go 实现的 Telegram 服务器专门用来测试。加上单元测试和 fuzzing,以及一个 7x24 小时跑在生产环境的 canary bot,持续验证重连、消息处理、内存泄漏和性能。
安全方面遵循 Telegram 官方的安全指南,用安全的随机数生成器,有重放攻击保护。
5、适合谁用
- 用 Go 写 Telegram Bot、需要直接调底层 API 的开发者
- 做 Telegram 数据采集或自动化、需要处理大量并发连接的场景
- 需要语音视频通话能力的应用(库内置了 tgcalls 支持)
如果觉得底层接口太繁琐,可以在 gotd 之上用 GoTGProto 这类封装库,它提供了 session 字符串、peer 存储这些高层抽象。
琐,可以在 gotd 之上用 GoTGProto 这类封装库,它提供了 session 字符串、peer 存储这些高层抽象。