Где воздух гор - там тишина снегов, молчание камней и дремлет сила

Программирование Web

Простой скрипт Golang для запросов к базе данных MySQL

2018-10-24 08:14:17









1. Golang сейчас очень популярный язык. Попробуем его в деле. Допустим у нас есть такая таблица базы данных:

CREATE TABLE `users` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`email` varchar(255) NOT NULL DEFAULT '',
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `index_users_on_email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1

Для работы нам необходимо установить драйвер для работы с базой данной:

sudo go get -u github.com/go-sql-driver/mysql



2. Создадим новый файл «database.go». Можно воспользоваться любым редактором.
Вначале нам необходимо подключить некоторые необходимые библиотеки Golang.
В нашем случае это стандартная библиотека для организации ввода/вывода "fmt", другая для работы с данными типа дата и библиотека "log", схожая с первой библиотекой по формату вывода в консоль. Там же подключим уже установленный в системе драйвер mysql.


package main

import (
"fmt"
"time"
"log"

"database/sql"
_ "github.com/go-sql-driver/mysql"
)



3. Далее мы создадим структуру User, которая будет использоваться для хранения данных из таблицы базы данных. По сути это промежуточная структура между базой и скриптом.




type User struct {
ID string
Email string
Created_At time.Time
Updated_At time.Time
}

4. Далее мы вызываем метод main(), который является точкой входя для скрипта. Он выводит информационное сообщение. После мы подключаемся к нашей базы данных посредством вызова метода sql.Open(). Строка в параметрах соединения «?parseTime=true» важна , так как позволяет правильно обрабатыватьданных После чего, с помощью defer закрываем соединение.


func main() {


fmt.Println("Golang and MySQL")


db, err := sql.Open("mysql", "myuser:mypassword@tcp(127.0.0.1:3306)/mydatabase?parseTime=true")


if err != nil {
panic(err.Error())
}


defer db.Close()


5. Далее мы выполняем запрос к нашей таблице:

results, err := db.Query("SELECT id, email, created_at, updated_at FROM users")
if err != nil {
panic(err.Error())
}



6. Затем мы запускаем цикл перебора полученных данных и одновременно создаем новую переменную структуры User, в которую и записываем эти данные с помощью метода:


err = results.Scan( &user.ID,&user.Email, &user.Created_At,&user.Updated_At )
if err != nil {
panic(err.Error())
}

7. И на конец, выводим эти данные в консоль. Как видите, все очень просто.


log.Printf(user.ID)
log.Printf(user.Email)
log.Println(user.Created_At)
log.Println(user.Updated_At)


На этом все. Исходный код скрипта ниже:

package main

import (
"fmt"
"time"
"log"

"database/sql"
_ "github.com/go-sql-driver/mysql"
)



type User struct {
ID string
Email string
Created_At time.Time
Updated_At time.Time
}



func main() {


fmt.Println("Golang and MySQL")


db, err := sql.Open("mysql", "root:123@tcp(127.0.0.1:3306)/devise_dev?parseTime=true")


if err != nil {
panic(err.Error())
}


defer db.Close()


results, err := db.Query("SELECT id, email, created_at, updated_at FROM users")
if err != nil {
panic(err.Error())
}

for results.Next() {
var user User

err = results.Scan( &user.ID,&user.Email, &user.Created_At,&user.Updated_At )
if err != nil {
panic(err.Error())
}

log.Printf(user.ID)
log.Printf(user.Email)
log.Println(user.Created_At)
log.Println(user.Updated_At)

}

}

Здесь нет комментариев


Новый комментарий:
























Яндекс.Метрика