问题描述

最近在使用 "github.com/ClickHouse/clickhouse-go" 这个库操作ClickHouse,为了验证程序本地通过docker启了一个ClickHouse,并将端口8123映射出来。

参考clickhouse-go的github上example编写程序,运行时一直报错:

[clickhouse][dial] secure=false, skip_verify=false, strategy=random, ident=1, server=0 -> [::1]:8123
[clickhouse][connect=1][hello] -> Golang SQLDriver 1.1.54213
[clickhouse][connect=1][connect] read error: read tcp [::1]:49513->[::1]:8123: i/o timeout
runtime error: invalid memory address or nil pointer dereference

原因

程序中ClickHouse端口访问错误。

    ……	
    fmt.Println("Clickhouse初始化...")
	connect, err := sql.Open("clickhouse", "tcp://localhost:8123?debug=true")
	if err != nil {
		log.Fatal(err)
	}
    ……

ClickHouse提供两个网络端口:

  • HTTP 默认8123
  • TCP 默认9000

而我之前用Java开发时,官方的JDBC使用的就是8123端口,也是基于HTTP实现的。对clickhouse不熟悉因此访问了错误的端口。

解决

重新启动clickhouse容器,并将9000端口暴露出来,go程序中地址也改成 "tcp://localhost:9000?debug=true"

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐