【问题标题】:How to convert snowflake array to an array in Golang while querying the database查询数据库时如何将雪花数组转换为Golang中的数组
【发布时间】:2018-10-27 13:59:09
【问题描述】:

我正在使用“gosnowflake”驱动程序从我的 Golang 应用程序中查询 Snowflake DB。 雪花模式:- 名称字符串 年龄整数 LOCS 数组

Golang 代码:-

package main

import (
    "database/sql"
    "fmt"
    "log"
    "strings"

    _ "github.com/snowflakedb/gosnowflake"
)

type Person struct {
    Name        string
    Age         string
    Locs        []string

}

var DB *sql.DB

func main() {

    connString := "USER" + ":" + "PWD" + "@" + "REGION" + "/" + "TEST"
    fmt.Println("DB Connection string..", connString)
    DB, _ = sql.Open("snowflake", connString)

    defer DB.Close()

    QRY := "SELECT NAME,AGE,LOCS FROM TEST.PERSON WHERE NAME='abc'"
    result, _ := DB.Query(QRY)
    fmt.Println(result)

    for result.Next() {
        var row Person
        err := result.Scan(&row.Name, &row.Age, &row.Locs)



        if err != nil {
            log.Fatal(err)
        }

        fmt.Println("Before returning..", row)
    }


}

问题:- 这里的问题是在数组中的 DB LOCS 中,但是在从 golang 代码中查询时,它会以字符串形式返回。所以值就像

[
   "XYZ",
   "DEF"
]

我想要的是直接将 LOCS 值转换为我的 golang 代码中的数组。因此,在 Person 结构中,它直接绑定到 Loc []string。

【问题讨论】:

  • 已经有一段时间了,但是@dks551 你能找到解决方案吗?

标签: go snowflake-cloud-data-platform


【解决方案1】:

除非 gosnowflake 中已经有内置的字符串数组类型,否则您可能需要实现自己的遵循 sql.Scanner Interface 的类型

例如

type ArrayString []string

func (a *ArrayString) Scan(src interface{}) error {

    switch v := src.(type) {
    case string:
        return json.Unmarshal([]byte(v), a)
    case []byte:
        return json.Unmarshal(v, a)
    default:
        return errors.New("invalid type")
    }

}

那么您的 Person 结构将是:

type Person struct {
    Name string
    Age  string
    Locs ArrayString
}

【讨论】:

    猜你喜欢
    • 2022-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多