Go-TDLib 从零开始编译并运行完整教程

一、简介

本教程包含五块内容:

  1. 编译并安装官方 TDLib(C++)

  2. 生成并编译 go‑tdlib(Go 语言绑定)源码

  3. 在 example 目录中配置环境、编译并运行 demo

  4. 解决常见的编译/链接/运行时错误

  5. 获取并使用 Telegram 的 API_ID 和 API_HASH

二、前置准备

  • 操作系统:macOS

  • Go 版本:≥ 1.23

  • 工具:CMake、Make、Xcode Command Line Tools

  • Telegram 账号:用于登录 my.telegram.org 获取 API_ID/API_HASH

 

三、编译并安装 TDLib(C++)

  1. 克隆 TDLib 源码并进入构建目录:

    git clone https://github.com/tdlib/td.git
    cd td
    mkdir build && cd build
  2. 配置、编译并安装到 /usr/local:

    cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
    cmake --build . --target install
  3. 验证安装结果:

    ls /usr/local/include/td/telegram/td_json_client.h
    # 应输出:/usr/local/include/td/telegram/td_json_client.h
    
    ls /usr/local/lib/libtdjson*
    # 应输出类似 libtdjson.dylib、libtdjson.1.8.48.dylib

四、获取并生成 go‑tdlib 源码

  1. 克隆 go‑tdlib 并进入目录:

    cd ~/projects
    git clone https://github.com/zelenin/go-tdlib.git
    cd go-tdlib
  2. 生成 Go 绑定代码:

    make

  3. 验证生成结果:

    ls client | grep generated.go

    应至少包含:

       - `function_generated.go` —— 根据 TL Schema 生成的请求方法  

       - `type_generated.go` —— 根据 TL Schema 生成的类型定义  

       - `unmarshaler_generated.go` —— JSON 反序列化逻辑  

       - `version_generated.go` —— 代码生成器版本信息  

      你可以这样确认: 
    ls client | grep generated.go
      若能看到上述文件,说明代码生成成功。
  4. (可选)查看 iter/ 目录下生成的迭代器文件,如 chat_history_iterator.go 等。

五、编译并运行 Example

  1. 进入示例目录:

    cd go-tdlib/example
  2. 安装 OpenSSL(如果尚未安装):

    brew install openssl@3
  3. 设置环境变量:

    export GOOS=darwin
    export GOARCH=arm64         # 或 amd64,视你的机器而定
    export CGO_ENABLED=1
    
    # TDLib 头文件与库
    export CGO_CFLAGS="-I/usr/local/include"
    export CGO_LDFLAGS="-L/usr/local/lib -ltdjson"
    
    # OpenSSL 头文件与库(Homebrew 路径)
    export CGO_CFLAGS="$CGO_CFLAGS -I$(brew --prefix openssl@3)/include"
    export CGO_LDFLAGS="$CGO_LDFLAGS -L$(brew --prefix openssl@3)/lib -lssl -lcrypto"
  4. 清理并获取依赖:

    go clean -cache -modcache
    go mod tidy
  5. 编译并内嵌 rpath:

    go build -o demo \
      -ldflags '-extldflags "-Wl,-rpath,/usr/local/lib"' \
      demo.go

  6. 运行 demo:

    ./demo

      首次运行会依次提示输入:API_ID,API_HASH,手机号(登陆授权第一步)

六、示例运行与授权流程

  1. 在命令行输入你的 手机号

  2. 输入 Telegram 客户端发来的 验证码

  3. 如果启用了两步验证,再输入 密码

  4. 登录成功后,进入 authorizationStateReady。

  5. 示例将打印所有收到的更新;你也可以在提示下发送消息。

 

七、常见问题及解决

  • undefined: JsonClient / Response / Type

    → 未生成 Go 绑定,回到 “四” 执行 make 或 go generate。

  • Library not loaded: @rpath/libtdjson

    → 未设置 rpath 或环境变量。见 “五.6” 加 -rpath 或 DYLD_LIBRARY_PATH。

  • linux_syscall.c: undefined: setresgid

    → 交叉编译到 Linux,确保 GOOS=darwin GOARCH=... CGO_ENABLED=1。

  • 500 Request aborted

    → 删除旧数据库目录(如 rm -rf tdlib-data/),重新运行。

  • strconv.Atoi parsing “”: invalid syntax

    → 未设置 API_ID/API_HASH,请通过 export 注入。

  • ld: library ‘ssl’ not found

    → 未配置 OpenSSL 库路径,见 “五.4” 中的 OpenSSL 设置。

 

八、获取 API_ID 和 API_HASH

  1. 打开 my.telegram.org 并登录。

  2. 点击 API development tools

  3. 填写应用名称等,创建新应用。

  4. 记录页面展示的 api_id(数字)和 api_hash(字符串)。

  5. 通过环境变量注入:

    export API_ID=你的_api_id
    export API_HASH="你的_api_hash"

九、小结

至此,你已完成:

  1. TDLib C++ 库的编译与安装

  2. go‑tdlib 源码的生成

  3. example/demo 的编译、运行与授权

  4. 常见错误的排查与解决

  5. API_ID/API_HASH 的获取与使用

 下一步,我们将把示例逻辑迁移到 Kratos v2.8.4 项目中,封装成 gRPC 服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值