gpt4 book ai didi

go - 查询数据库时如何将雪花数组转换为Golang中的数组

转载 作者:IT王子 更新时间:2023-10-29 00:47:50 25 4
gpt4 key购买 nike

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

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"
]

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

最佳答案

除非 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
}

关于go - 查询数据库时如何将雪花数组转换为Golang中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53018293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com