【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)
	}
}
相关推荐
色空大师42 分钟前
【网站搭建实操(一)环境部署】
java·linux·数据库·mysql·网站搭建
亚历克斯神1 小时前
Flutter for OpenHarmony: Flutter 三方库 mutex 为鸿蒙异步任务提供可靠的临界资源互斥锁(并发安全基石)
android·数据库·安全·flutter·华为·harmonyos
IAUTOMOBILE1 小时前
用Python批量处理Excel和CSV文件
jvm·数据库·python
常利兵2 小时前
Spring项目新姿势:Lambda封装Service调用,告别繁琐注入!
java·数据库·spring
liqianpin12 小时前
MySQL官网驱动下载(jar包驱动和ODBC驱动)【详细教程】
数据库·mysql
kgduu3 小时前
js之客户端存储
javascript·数据库·oracle
Tony Bai3 小时前
Rust 看了流泪,AI 看了沉默:扒开 Go 泛型最让你抓狂的“残疾”类型推断
开发语言·人工智能·后端·golang·rust
light blue bird3 小时前
原生控件GDI完成作业协同界面
jvm·数据库·.net·winform·gdi+界面
聊点儿技术3 小时前
利用IP归属地查询识别异地登录风险:企业账号安全的技术探索
数据库·tcp/ip·安全
ん贤3 小时前
AI 大模型落地系列|Eino 编排进阶篇:一文讲透编排(Chain 与 Graph)
人工智能·golang·编排·eino