登录
首页 >  Golang >  Go问答

如何将ClickHouse的groupArray函数的结果初始化为数组

来源:stackoverflow

时间:2024-04-14 12:12:36 100浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《如何将ClickHouse的groupArray函数的结果初始化为数组》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

在我的 go 应用程序中,我通过 clickhouse-go 包向 clickhouse 数据库发出请求。我所做的这个查询总是只返回一个记录,并且它是一个整数数组。有没有办法在 go 中将该结果初始化为数组?

var ids []int

ids, err := database.ClickHouse.Exec("SELECT groupArray(ID) FROM layers;")
if err != nil {
    fmt.Println(err)
}

我尝试了这样的代码,但它引发了一个错误:无法将结果分配给多重分配中的ids(类型[]int)。


解决方案


Exec 方法不返回行,它返回 driver.resulterror

func (stmt *stmt) exec(args []driver.value) (driver.result, error)
                                             ^^^^^^^^^^^^^

并且,driver.Result 类型具有以下定义(注释已删除):

type result interface {
    lastinsertid() (int64, error)
    rowsaffected() (int64, error)
}

您正在寻找的是返回 driver.RowsQuery 方法:

func (stmt *stmt) query(args []driver.value) (driver.rows, error)
                                              ^^^^^^^^^^^

然后您可以迭代行以生成所需的数组。

readme.md 中列出了一个示例(在此处复制):

rows, err := connect.Query("SELECT country_code, os_id, browser_id, categories, action_day, action_time FROM example")
if err != nil {
    log.Fatal(err)
}
defer rows.Close()

for rows.Next() {
    var (
        country               string
        os, browser           uint8
        categories            []int16
        actionDay, actionTime time.Time
    )
    if err := rows.Scan(&country, &os, &browser, &categories, &actionDay, &actionTime); err != nil {
        log.Fatal(err)
    }
    log.Printf("country: %s, os: %d, browser: %d, categories: %v, action_day: %s, action_time: %s", country, os, browser, categories, actionDay, actionTime)
}

希望有帮助!

以上就是《如何将ClickHouse的groupArray函数的结果初始化为数组》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>