@rudolph_senger
Вот пример универсальной функции для выполнения SELECT запроса на Golang, используя базу данных SQL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
package main import ( "database/sql" "fmt" "log" _ "github.com/go-sql-driver/mysql" ) // Функция для выполнения SELECT запроса func executeSelectQuery(db *sql.DB, query string) ([]map[string]interface{}, error) { rows, err := db.Query(query) if err != nil { return nil, err } defer rows.Close() columns, err := rows.Columns() if err != nil { return nil, err } // Создаем срез, чтобы хранить результаты results := make([]map[string]interface{}, 0) // Создаем срез, чтобы хранить значения для строк в rows.Scan() values := make([]interface{}, len(columns)) for i := range values { values[i] = new(interface{}) } // Извлекаем строки из результата запроса for rows.Next() { err := rows.Scan(values...) if err != nil { return nil, err } // Создаем карту, чтобы хранить значения столбцов row := make(map[string]interface{}) // Извлекаем значения из values[] и сохраняем их в row for i, column := range columns { row[column] = *(values[i].(*interface{})) } results = append(results, row) } return results, nil } func main() { // Подключение к базе данных db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database") if err != nil { log.Fatal(err) } defer db.Close() // Выполнение SELECT запроса query := "SELECT * FROM users" results, err := executeSelectQuery(db, query) if err != nil { log.Fatal(err) } // Вывод результатов for _, row := range results { for column, value := range row { fmt.Printf("%s: %v ", column, value) } fmt.Println("----------") } } |
В этом примере функция executeSelectQuery
принимает два параметра: db
, настроенный объект базы данных в виде *sql.DB
, и query
, содержащий запрос SELECT.
Функция выполняет запрос, извлекает результирующие строки и столбцы, а затем создает карту с именами столбцов и значениями, полученными из строк.
В функции main
мы открываем соединение с базой данных, вызываем executeSelectQuery
с запросом и затем выводим результаты запроса.