TDengine Go 连接器入门指南

TDengine Go 连接器入门指南

本文面向 TDengine 初学者,目标是让你在 5~10 分钟内完成:安装连接器 → 建立连接 → 建库建表 → 写入 → 查询,并掌握 Go 连接器在工程里的基本使用方式与常见问题排查思路。

说明:TDengine 官方 Go 连接器为driver-go,实现了 Go 标准库database/sql接口。

1. 选择连接方式

driver-go支持两种连接方式,建议优先使用WebSocket 连接

  • WebSocket 连接(推荐):通过taosAdapter的 WebSocket 接口访问 TDengine。跨平台、依赖更轻,适合云环境/容器环境,也更便于与服务端版本解耦。
  • 原生连接(Native):Go 进程会加载 TDengine 客户端驱动(如libtaos.so/taos.dll/libtaos.dylib)直接连接 TDengine。性能高,但对本地依赖与版本匹配要求更高。

2. 环境准备

在运行示例前,请确认:

  • TDengine TSDB 服务端已启动,并且你的程序能访问到它。
  • 若使用WebSocket 连接:确保taosAdapter的 WebSocket 服务可用(常见默认端口6041)。
  • 若使用原生连接:确保已安装 TDengine TSDB 客户端驱动。
    • 如果你的机器已经安装了 TDengine 服务端软件,一般已包含客户端驱动。
    • 如果仅在没有服务端的软件环境运行原生连接,请参考连接器总览页的“安装客户端驱动”:
      • 安装客户端驱动

3. 安装 Go 连接器

driver-go使用 Go Modules 管理依赖。

mkdirtdengine-go-quickstartcdtdengine-go-quickstart go mod init tdengine-go-quickstart go get github.com/taosdata/driver-go/v3

4. 第一个程序:建库建表、写入、查询

下面提供两份“最小可运行”示例,你可以任选其一。

为了避免USE dbdatabase/sql连接复用场景下引入状态干扰(连接池会复用连接),示例采用“先连到无 db 的 DSN 创建数据库,再用带 db 的 DSN 做业务操作”的方式。

4.1 WebSocket(推荐)

创建文件main.go

packagemainimport("context""database/sql""fmt""log""time"// WebSocket 驱动_"github.com/taosdata/driver-go/v3/taosWS"// 可选:用于解析 TDengine 错误码taosErrors"github.com/taosdata/driver-go/v3/errors")funcmain(){// 1) 先连接到“无 db”的 DSN,用于创建数据库// DSN 规范见 Go 连接器参考文档。// 常见默认:WebSocket 端口 6041rootDSN:="root:taosdata@ws(localhost:6041)/"rootDB,err:=sql.Open("taosWS",rootDSN)iferr!=nil{log.Fatal(err)}deferrootDB.Close()// 给连接与单次请求设置超时(建议)ctx,cancel:=context.WithTimeout(context.Background(),10*time.Second)defercancel()if_,err:=rootDB.ExecContext(ctx,"CREATE DATABASE IF NOT EXISTS demo");err!=nil{logFatalTaos(err)}// 2) 再连接到“带 db”的 DSN,进行建表/写入/查询demoDSN:="root:taosdata@ws(localhost:6041)/demo"db,err:=sql.Open("taosWS",demoDSN)iferr!=nil{log.Fatal(err)}deferdb.Close()// 按需调整连接池参数(示例给出一个保守配置)db.SetMaxOpenConns(10)db.SetMaxIdleConns(10)db.SetConnMaxLifetime(30*time.Minute)ctx2,cancel2:=context.WithTimeout(context.Background(),10*time.Second)defercancel2()// 创建超级表与子表_,err=db.ExecContext(ctx2,` CREATE STABLE IF NOT EXISTS meters ( ts TIMESTAMP, current FLOAT, voltage INT ) TAGS (location BINARY(24)) `)iferr!=nil{logFatalTaos(err)}_,err=db.ExecContext(ctx2,"CREATE TABLE IF NOT EXISTS d0 USING meters TAGS('beijing')")iferr!=nil{logFatalTaos(err)}// 写入两条数据_,err=db.ExecContext(ctx2,"INSERT INTO d0 VALUES (NOW, 10.2, 220) (NOW + 1s, 10.3, 221)")iferr!=nil{logFatalTaos(err)}// 查询并打印rows,err:=db.QueryContext(ctx2,"SELECT ts, current, voltage FROM meters LIMIT 5")iferr!=nil{logFatalTaos(err)}deferrows.Close()forrows.Next(){var(ts time.Time currentfloat32voltageint32)iferr:=rows.Scan(&ts,&current,&voltage);err!=nil{log.Fatal(err)}fmt.Printf("ts=%s current=%.2f voltage=%d\n",ts.Format(time.RFC3339Nano),current,voltage)}iferr:=rows.Err();err!=nil{logFatalTaos(err)}fmt.Println("done")}funclogFatalTaos(errerror){iferr==nil{return}// 尝试输出 TDengine 错误码,便于排查ifte,ok:=err.(*taosErrors.TaosError);ok{log.Fatalf("taos error: code=%d msg=%s",int(te.Code),te.ErrStr)}log.Fatal(err)}

运行:

go run.

4.2 原生连接(Native)

原生连接与 WebSocket 的主要区别是:导入的驱动不同、协议与端口通常不同(常见默认原生端口6030)。

将上面的示例改动两处即可:

  1. 把驱动导入改为:
_"github.com/taosdata/driver-go/v3/taosSql"
  1. 把 DSN 与 driverName 改为原生连接:
rootDSN:="root:taosdata@tcp(localhost:6030)/"rootDB,err:=sql.Open("taosSql",rootDSN)demoDSN:="root:taosdata@tcp(localhost:6030)/demo"db,err:=sql.Open("taosSql",demoDSN)

其余 SQL 与database/sql用法保持不变。

5. 连接参数与 DSN

常见 DSN 形态:

username:password@protocol(address)/dbname?param=value
  • WebSocket:root:taosdata@ws(localhost:6041)/demo
  • 原生:root:taosdata@tcp(localhost:6030)/demo

注意事项:

  • 密码包含特殊字符时,需要用url.QueryEscape转义(参考 Go 连接器手册中的 DSN 规范说明)。
  • IPv6 地址需要用方括号,例如:root:taosdata@ws([::1]:6041)/demo
  • timezone参数可指定连接时区(IANA 格式),例如:timezone=Asia%2FShanghai

详见:

  • Go 连接器参考手册

6. 常见问题与排查

  • 连接失败(WebSocket):确认taosAdapter已启动、端口可达、账号密码正确。
  • 连接失败(原生):确认客户端驱动已安装且可被加载;并检查客户端/服务端版本匹配。
  • 查询结果时区与预期不一致:按需设置 DSNtimezone,并注意默认会按本地时区转换。
  • 需要定位 TDengine 错误原因:打印TaosErrorCode/ErrStr,并对照错误码文档。

参考:

  • 错误码表

7. 下一步(进阶能力入口)

当你能跑通上面的“建库建表、写入、查询”后,建议按需求继续:

  • 参数绑定(stmt / stmt2)以提升写入性能。
  • 无模式写入(schemaless)以接入 InfluxDB Line Protocol / OpenTSDB 等。
  • TMQ 消息订阅与消费。

关于TDengine

TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1150201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员、产品经理、项目经理、普通人转行AI大模型教程,这份超详细学习指南请收藏!

文章为Java程序员提供了转型大模型开发的全面指南,包括学习基础知识、掌握工具框架、提升编程能力、数学知识储备和项目实践五大步骤。分析了Java程序员的优势,介绍了AI大模型时代的新兴技术岗位,以及AI工程师需要掌握的知识领域,…

windows显示隐藏的“文件夹”和文件

要查看隐藏的文件夹,可以通过文件资源管理器设置、命令提示符或控制面板来显示这些文件夹。 方法一:通过文件资源管理器设置 打开文件资源管理器:按下 Win E 键。 进入查看选项:点击顶部的 查看 选项卡,然后选择 选项…

清华智源研究成果登《Science》:DrugCLIP用AI驱动百万倍速药物筛选,开启全基因组靶向时代

在计算生物学领域,有一个被追逐了数十年的“圣杯”——化学基因组学。其核心愿景是实现对全基因组蛋白质靶点的全覆盖,为每一个潜在的生命密码配上一把精准的“药物钥匙”。人类基因组编码约 20000 种蛋白质,其中 90% 与疾病密切相关&#xf…

什么是OLC(CPU过载控制)

文章目录为什么需要OLCOLC应用场景是怎样的OLC是如何工作的CPU过载控制OLC(Overload Control)是一种CPU过载调控机制。当CPU过载时,OLC能够对受监控协议报文和任务进行调控,通过不同优先级业务的合理规划和限制报文通过等方式&…

大模型算法工程师年薪百万,这可能是你最好的职业选择_今年大模型这工资是认真的吗?

大模型技术爆发带来算法工程师"黄金期",薪资远超传统IT岗位。一线大厂纷纷扩招AI人才,提供百万年薪。针对企业需求与求职者能力差距,《AI算法工程师培养计划》由大厂专家团队打造,通过十大企业级项目实战,确…

在trae、qoder、Claude Code、Cursor等AI IDE中使用ui-ux-pro-max-skill

ui-ux-pro-max-skill官方地址 全局安装 uipro-cli npm install -g uipro-cli 进入你的前端项目 cd /your/project 初始化并绑定 Claude Code 作为 AI uipro init --ai claude # 如果你用 Cursor 就用 --ai cursor uipro init --ai cursor # Cursor uipro init --ai qode…

三菱Q型PLC在4轴伺服定位及控制中的应用:QD75MH4定位、触摸屏及PLC程序技术资料

三菱Q型pLc.QD75Mh4定位及控制.4轴伺服定位及控制,触摸屏及plc程序,三菱伺服,光纤伺服通讯,参考性强,已安全应用,4轴机械手抓拿焊接线,技术性资料三菱QD75MH4定位模块配4轴机械手的实战玩法&…

做了个工具可以帮你录制任意网页操作并快速转为可以给大模型调用的 MCP

Browserwing ,支持可视化录制浏览器的操作,也支持 AI 辅助提取结构化数据,一行代码不用写即可创建一个可回放的浏览器行为脚本。可以使用 http api 传参调用,也可以转为 MCP 给大模型调度。 Github 地址是:https://gi…

ruoyi 新增每页分页条数

正文开始:ruoyi的分页原理,大致就是使用MyBatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的 SQL,然后重写 SQL,实现分页查询。问题提出:若依框架中,使用的是 Pag…

ESP8266生成二维码算法 OLED显示 支持各种平台移植 算法部分采用c语言,可以移植到各...

ESP8266生成二维码算法 OLED显示 支持各种平台移植 算法部分采用c语言,可以移植到各种平台。 代码有两种,一种是arduino开发的,一种是乐鑫sdk安信可开发环境的。 两种任选一种,联系时说明要哪种。 arduino开发环境使用u8g2库&…

部分离线强化学习相关的算法总结(td3+bc/conrft)

原文发表在知乎,辛苦移步:《部分离线强化学习相关的算法总结(td3bc/conrft)》 最近看的一些在高复杂性,时长较长的场景中使用强化学习算法提升效果的案例,例如《关于gr-rl与pi-0.6(π₀.₆)的一些想法》,论文中展示的…

深度测评自考必备AI论文平台TOP8:选对工具轻松写完毕业论文

深度测评自考必备AI论文平台TOP8:选对工具轻松写完毕业论文 自考论文写作工具测评:如何选对AI平台提升效率 随着自考人数逐年增长,毕业论文的撰写成为许多学生面临的难题。从选题到成稿,每一个环节都可能因为缺乏合适的工具而变得…

上手实操 | Dense Bev 融合优化方案

1. 简介 在自动驾驶领域,BEV 是一种从上方看对象或场景的视角,通过多个不同视场的传感器融合成 BEV 特征,可以提供车辆周围环境的完整视图,供下游任务使用,例如障碍物检测,路径规划等。 基于 BEV 的环境感…

西门子PLC 和v90 伺服变频器G120通讯 2台西门子变频器G120 Profinet通讯

西门子PLC 和v90 伺服变频器G120通讯 2台西门子变频器G120 Profinet通讯,4台伺服V90 PN口通讯,变频器和伺服已写好FB块,非常好用,方便省事,不必再每个写梯形图浪费时间,只要写相应地址,FB块直接…

【收藏必备】大模型微调入门到精通:原理、优势与PEFT技术详解

文章介绍大模型微调的概念、必要性、优势和技术路线。微调是在预训练模型基础上用少量特定数据继续训练,以适应特定任务。优势包括提升任务表现、防止过拟合、降低成本和增强领域适应性。技术路线按参数规模分为全参微调和参数高效微调,按训练流程分为监…

西门子200 Smart PLC与昆仑通态触摸屏的脉冲除尘器程序(20仓x12阀,手动自动控制...

西门子200smart PLC与昆仑通态触摸屏所写的脉冲除尘器程序。 20个仓,每个仓包含12个脉冲阀,手动和自动控制,定时延时切换仓门和脉冲阀。 包含PLC程序,触摸屏组态画面,工艺流程,电气原理图。 真实工程项目&a…

基于微信小程序的家乡特产销售平台-计算机毕业设计源码+LW文档

摘要 在当下数字经济迅速发展以及信息技术不断革新的大环境中,互联网技术的不断迭代更新,借助微信小程序搭建的家乡特产电子商务平台呈现出了独特的创新价值,该平台的设计思路打破了传统线下销售管理模式的束缚,切实解决了以往依靠…

高频信号处理篇---鉴频

一、先理解:鉴频要解决什么问题?场景回顾:FM信号的特点FM信号是频率变化、幅度不变的波:发送端:声音大 → 频率变高声音小 → 频率变低(但振幅始终不变) 接收端:收到一个“频率在跳舞…

基于Java的家政服务平台的设计与实现毕业论文+PPT(附源代码+演示视频)

文章目录基于Java的家政服务平台的设计与实现一、项目简介(源代码在文末)1.运行视频2.🚀 项目技术栈3.✅ 环境要求说明4.包含的文件列表(含论文)数据库结构与测试用例系统功能结构前台运行截图后台运行截图项目部署源码…

汽车平顺性实战:从悬架振动到路面反演

汽车平顺性分析,Z向动力学分析、被动悬架分析(刚度和阻尼的线性和非线性)分析。 对三自由度、四自由度、七自由度、八自由度和九自由度模型,时域频域分析。 内容包含所有方程、模型以及程序。 可用于工作及学习(赠送模…