Реализовал это так:
/*
ClientPostgres делает запросы к бд.
На вход запрос.
На выход слайс столбцов и строк.
*/
func ClientPostgres(reqSQL string) ([]string, [][]string) {
var out [][]string
db, err := sql.Open("postgres", config.PostgresqlConfig)
defer db.Close()
if err != nil {
fmt.Println("Failed to connect", err)
return nil, nil
}
rows, err := db.Query(reqSQL)
if err != nil {
fmt.Println("Failed to run query", err)
return nil, nil
}
cols, err := rows.Columns()
if err != nil {
fmt.Println("Failed to get columns", err)
return nil, nil
}
// Result is your slice string.
rawResult := make([][]byte, len(cols))
result := make([]string, len(cols))
dest := make([]interface{}, len(cols)) // A temporary interface{} slice
for i, _ := range rawResult {
dest[i] = &rawResult[i] // Put pointers to each string in the interface slice
}
for rows.Next() {
err = rows.Scan(dest...)
if err != nil {
fmt.Println("Failed to scan row", err)
return nil, nil
}
for i, raw := range rawResult {
if raw == nil {
result[i] = "\\N"
} else {
result[i] = string(raw)
}
}
rowitem := make([]string, len(cols))
for i := 0; i < len(cols); i++ {
rowitem[i] = result[i]
}
out = append(out, rowitem)
}
return cols, out
}
Не ругайте сильно, я только начал изучать golang, но может кому то пригодится.