Динамическая запись данных из таблицы postgres

Всем привет Использую pgx. Вот код получения данных из таблицы в которой два столбца

func GetAll(aim, table string) (string, string) {
    dbitem, _ := pgx.Connect(context.Background(), dbconn)
    defer dbitem.Close(context.Background())
    name, data := "", "" //вот здесь создать один интерфейс(например) 
    err := dbitem.QueryRow(context.Background(), "select "+aim+" from "+table).Scan(&name, &data) //здесь в интерфейс записать то, что пришло из базы.
    if err != nil {
        log.Fatal(err)
    }
    return name, data
}

func main() {
    log.Println(GetAll("*", "textData"))
}

.Scan требует от меня 2 переменные, чтоб положить в них значения двух столбцов, что логично.

Но я бы хотел, не быть првязанным к количеству переменных и с помощью Scan записывать все что приходит из таблицы, допустим, в интерфейс. Чтобы не создавать переменные, не ограничиваться количеством переменных и т.д.

Как я могу это сделать? Если я использую один интерфейс, то Scan ругается что ему все равно нужен второй field. Как провернуть то что мне нужно?


Ответы (1 шт):

Автор решения: umd

Поковырялся немного и, кажется, решил проблему. ЧАстично пока что, буду дальше ковырять)

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/jackc/pgx/v4"
)

var dbconn = "postgres://user:pass@localhost:5432/test"

func Get(aim, table string) []string {
    dbitem, _ := pgx.Connect(context.Background(), dbconn)
    defer dbitem.Close(context.Background())
    data, _ := dbitem.Query(context.Background(), "select "+aim+" from "+table)
    var dataSlc []string
    for data.Next() {
        a, _ := data.Values()
        for _, it := range a {
            dataSlc = append(dataSlc, fmt.Sprint(it))
        }
    }
    return dataSlc
}

func main() {
    Data := Get("*", "textData")
    for num, it := range Data {
        log.Println(it, num)
    }
}

Только не получается вернуть элементы массива(((Мне нужно их использовать в других функциях(

→ Ссылка