@brandyn_heller
Вы можете создать функцию, которая будет принимать параметры для SELECT-запроса, выполнять запрос к базе данных и возвращать результат.
Ниже приведен пример такой универсальной функции:
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" "log" _ "github.com/go-sql-driver/mysql" ) // Функция для выполнения SELECT-запроса func selectQuery(db *sql.DB, query string, args ...interface{}) ([]map[string]interface{}, error) { // Выполняем запрос к базе данных rows, err := db.Query(query, args...) if err != nil { return nil, err } defer rows.Close() // Получаем названия колонок columns, err := rows.Columns() if err != nil { return nil, err } // Создаем слайс для хранения результатов results := []map[string]interface{}{} // Создаем временную переменную для хранения значений колонок values := make([]interface{}, len(columns)) for i := range values { values[i] = new(interface{}) } // Обрабатываем каждую строку результата for rows.Next() { // Считываем значения колонок в values err := rows.Scan(values...) if err != nil { return nil, err } // Создаем мапу для хранения значений колонок row := map[string]interface{}{} // Получаем значения из values и сохраняем в мапе for i, column := range columns { val := *(values[i].(*interface{})) row[column] = val } // Добавляем мапу в результаты results = append(results, row) } return results, nil } func main() { // Подключение к базе данных db, err := sql.Open("mysql", "username:password@tcp(localhost:3306)/dbname") if err != nil { log.Fatal(err) } defer db.Close() // Вызов функции selectQuery для выполнения SELECT-запроса query := "SELECT * FROM your_table WHERE your_column = ?" results, err := selectQuery(db, query, "some_value") if err != nil { log.Fatal(err) } // Вывод результатов for _, row := range results { log.Println(row) } } |
В этом примере мы создаем функцию selectQuery
, которая принимает соединение с базой данных, строку SQL-запроса и аргументы для заполнения заполнителей (?
) в запросе. Функция выполняет запрос с помощью db.Query
, получает названия колонок с помощью rows.Columns
, а затем считывает значения каждой строки с помощью rows.Next
и rows.Scan
. Результаты сохраняются в слайс results
, который затем возвращается из функции.
В main
-функции мы создаем подключение к базе данных с помощью sql.Open
, а затем вызываем функцию selectQuery
для выполнения SELECT-запроса. Результаты выводятся с помощью log.Println
.