使用切片将数据库列扫描到struct中

时间:2017-07-20 13:34:32

标签: go

我有一个包含像这样的切片的字段的结构,现在我想将sql-query中的列收集到这些切片中

type StructOfSlices struct {
    Column1 []string
    Column2 []string
}

是否有比下面更容易/更具可扩展性/更有效的方法?

这里我首先创建一个"单个"结构的版本......

type StructSingle struct {
    Column1 string
    Column2 string
}

var s StructOfSlices

rows, _ := db.Query("SELECT column1, column2 FROM table")

...然后扫描每个单独的结构...

for rows.Next() {
    var single StructSingle

    db.Scan(&single.Column1, &single.Column2)

    s.Column1 = append(s.Column1, single.Column1)
    s.Column2 = append(s.Column2, single.Column2)
}

...然后附加到切片结构

1 个答案:

答案 0 :(得分:4)

不,这是做到这一点的方法。你基本上是在做一个支点,我不知道自动做到这一点。鉴于您只使用了几行代码,我认为您的解决方案没有问题。

由于您每列扫描一个变量,实际上根本不需要StructSingle类型 - 您可以使用两个本地string变量,这样可以使它更简单:

for rows.Next() {
    var col1, col2 string
    db.Scan(&col1, &col2)

    s.Column1 = append(s.Column1, col1)
    s.Column2 = append(s.Column2, col2)
}

完全摆脱StructSingle类型。