【Go】go连接clickhouse使用TCP协议


离开你是傻是对是错

是看破是软弱

这结果是爱是恨或者是什么

如果是种解脱

怎么会还有眷恋在我心窝

那么爱你为什么

🎵 黄品源/莫文蔚《那么爱你为什么》


go 复制代码
package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"github.com/ClickHouse/clickhouse-go/v2"
)

func main() {
	// 配置连接参数
	conn, err := clickhouse.Open(&clickhouse.Options{
		Addr: []string{"127.0.0.1:9000"}, // ClickHouse的TCP地址
		Auth: clickhouse.Auth{
			Database: "default",    // 数据库名
			Username: "default",    // 用户名
			Password: "",           // 密码
		},
		DialTimeout: 5 * time.Second,
		Compression: &clickhouse.Compression{
			Method: clickhouse.CompressionLZ4,
		},
	})

	if err != nil {
		log.Fatalf("连接 ClickHouse 失败: %v", err)
	}

	// 确保连接成功
	if err := conn.Ping(context.Background()); err != nil {
		log.Fatalf("无法连接到 ClickHouse: %v", err)
	}

	fmt.Println("成功连接到 ClickHouse!")

	// 执行查询:获取 id 和 title 字段
	rows, err := conn.Query(context.Background(), "SELECT id, title FROM my_table")
	if err != nil {
		log.Fatalf("查询执行失败: %v", err)
	}
	defer rows.Close()

	// 迭代查询结果
	for rows.Next() {
		var id uint64
		var title string

		// 扫描每一行的结果
		if err := rows.Scan(&id, &title); err != nil {
			log.Fatalf("读取结果失败: %v", err)
		}

		fmt.Printf("id: %d, title: %s\n", id, title)
	}

	// 检查是否有迭代中的错误
	if err := rows.Err(); err != nil {
		log.Fatalf("查询中发生错误: %v", err)
	}
}
相关推荐
派小心.3 小时前
网站统计多域名数据隔离配置
大数据·数据库·人工智能·小程序·数据分析
DongQiShanRen3 小时前
六根硬件映射(中):双站校验、生克闭环与驱动接口
数据库·人工智能·算法·rust·哈希算法·集成学习
wespaul3 小时前
VeapAI 自然语言操作实战|第 09 篇:收尾——六条原则与三条演进线
大数据·数据库·人工智能
tryxr3 小时前
事务的特性
数据库·事务
广州灵眸科技有限公司3 小时前
瑞芯微(EASY EAI)RV1126B DeepSeek R1部署教程
linux·数据库·yolo
枫叶丹44 小时前
异构数据库结构如何同步:理解 KFS 的 DDL 转换机制
网络·数据库
这个DBA有点耶4 小时前
MySQL B-tree索引并发控制优化:写密集场景的锁瓶颈与内核级解法
java·数据库·程序人生·算法·database·dba
福大大架构师每日一题4 小时前
agno v3.1.3发布:外部智能体全面进入“可持久化、可恢复、可取消、可回放”时代
服务器·数据库·php
数据库小学妹4 小时前
工业物联网时序数据库怎么选?存-查-算一体化选型指南
数据库·物联网·时序数据库·工业物联网·融合数据库·时序选型
wespaul4 小时前
VeapAI 自然语言操作实战|第 08 篇:治理层——审计、指标、评估与权限
运维·网络·数据库