登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-26 08:51:42 424浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《如何在查询数据库时将雪花数组转换为Golang中的数组》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

我正在使用“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。


解决方案


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

理论要掌握,实操不能落!以上关于《如何在查询数据库时将雪花数组转换为Golang中的数组》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

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