gotd/td:用 Go 语言操作 Telegram 的底层库

做 Telegram 相关开发的人应该都遇到过这个问题:想用 Go 写个机器人或者自动化工具,但官方没有 Go 语言的 SDK。Python 有 telethon,JavaScript 有 gramjs,Go 生态一直是空白。

gotd/td 就是填这个坑的项目。它是一个纯 Go 实现的 Telegram MTProto 客户端库,Star 数 2262,不算特别火,但在 Go 开发 Telegram 这个细分领域里,基本是唯一的选择。

正文顶部截图

这个项目能干什么

简单说,gotd/td 让你用 Go 代码直接调用 Telegram 的 MTProto 接口。不管是写机器人还是做用户端工具,都可以用它。

几个核心能力:

  • 完整实现 MTProto 2.0 协议,可以调用任意 Telegram API 方法
  • 支持语音和视频通话,包括一对一和群组通话
  • 内存占用低,每个空闲客户端只占 150kb,能同时处理上千个连接
  • 支持 WebSocket 传输,甚至可以在 WASM 环境里跑
  • 自动重连、会话存储、数据中心迁移这些该有的都有

用起来也不复杂。装好依赖,写几行代码就能跑起来:

client := telegram.NewClient(appID, appHash, telegram.Options{})
if err := client.Run(context.Background(), func(ctx context.Context) error {
    api := client.API()
    // 调用 Telegram API
    return nil
}); err != nil {
    panic(err)
}

README区域截图

测试做得比较扎实

这个项目让我印象深的地方是测试。不只是普通的单元测试,它有:

  • 端到端测试,直接连真实的 Telegram 服务器跑
  • 自己用 Go 写了个 Telegram 服务端,专门用来测试
  • 24 小时运行的金丝雀机器人,持续测试重连、消息处理、内存泄漏

很多开源项目测试都是糊弄一下,这个项目在测试上确实花了功夫。

适合谁用

如果你是 Go 开发者,想做 Telegram 相关的东西,这基本是必选项。几个典型场景:

  • 写 Telegram 机器人,需要直接调用底层 API
  • 做自动化工具,比如消息转发、数据采集
  • 需要处理大量并发连接的服务

不过有个坑要注意:Telegram 对账号风控比较严,滥用 API 容易被封号。项目文档里专门写了「如何不被封」的指南,用之前建议仔细看看。

和其他方案的对比

Python 生态有 telethon 和 pyrogram,成熟度更高,社区也更大。但如果你的技术栈是 Go,或者对性能有要求,gotd/td 是更好的选择。

项目还有一个上层封装库 GoTGProto,封装了一些常用操作,用起来更简单。如果觉得 gotd/td 太底层,可以试试那个。

代码是 MIT 协议,商业项目也能用。

了一些常用操作,用起来更简单。如果觉得 gotd/td 太底层,可以试试那个。

代码是 MIT 协议,商业项目也能用。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐