package main
import (
"database/sql"
"fmt"
sq "github.com/Masterminds/squirrel"
_ "github.com/mattn/go-sqlite3"
)
type User struct {
ID int
Username string
Email string
}
// Создание таблицы пользователей
func CreateUserTable() error {
// Ваш код здесь
db, err := sql.Open("sqlite3", "users.db")
if err != nil {
fmt.Println("Ошибка при подключении к базе данных:", err)
return err
}
defer db.Close()
// Создание таблицы
_, err = db.Exec(`CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT,
email TEXT
)`)
if err != nil {
fmt.Println("Ошибка при создании таблицы:", err)
return err
}
fmt.Println("Таблица успешно создана")
return nil
}
// Вставка пользователя в таблицу
func InsertUser(user User) error {
db, err := sql.Open("sqlite3", "users.db")
if err != nil {
return err
}
defer db.Close()
query, args, err := PrepareQuery("insert", "users", user)
if err != nil {
return err
}
_, err = db.Exec(query, args...)
if err != nil {
return err
}
return nil
}
// Выборка пользователя из таблицы
func SelectUser(userID int) (User, error) {
// Ваш код здесь
db, err := sql.Open("sqlite3", "users.db")
if err != nil {
fmt.Println("Ошибка при подключении к базе данных:", err)
return User{}, err
}
defer db.Close()
// Выборка данных
query, _, err := PrepareQuery("select", "users", User{ID: userID})
if err != nil {
return User{}, err
}
rows, err := db.Query(query)
if err != nil {
return User{}, err
}
defer rows.Close()
for rows.Next() {
var id int
var name string
var email string
err = rows.Scan(&id, &name, &email)
if err != nil {
fmt.Println("Ошибка при сканировании данных:", err)
return User{}, nil
}
if id == userID {
user := User{
ID: id,
Username: name,
Email: email,
}
return user, nil
}
}
return User{}, fmt.Errorf("error: empty user")
}
// Обновление информации о пользователе
func UpdateUser(user User) error {
// Ваш код здесь
db, err := sql.Open("sqlite3", "users.db")
if err != nil {
fmt.Println("Ошибка при подключении к базе данных:", err)
return err
}
defer db.Close()
query, args, err := PrepareQuery("update", "users", user)
if err != nil {
return err
}
// Обновление данных
_, err = db.Exec(query, args...)
if err != nil {
fmt.Println("Ошибка при обновлении данных:", err)
return err
}
return nil
}
// Удаление пользователя из таблицы
func DeleteUser(userID int) error {
// Ваш код здесь
db, err := sql.Open("sqlite3", "users.db")
if err != nil {
fmt.Println("Ошибка при подключении к базе данных:", err)
return err
}
defer db.Close()
// Удаление данных
query, args, err := PrepareQuery("delete", "users", User{ID: userID})
_, err = db.Exec(query, args...)
if err != nil {
fmt.Println("Ошибка при удалении данных:", err)
return err
}
return nil
}
// Функция для подготовки запроса
func PrepareQuery(operation string, table string, user User) (string, []interface{}, error) {
// Ваш код здесь insert, select, update, delete
switch operation {
case "insert":
query, args, err := sq.
Insert(table).Columns("username", "email").
Values(user.Username, user.Email).
ToSql()
return query, args, err
case "select":
query, args, err := sq.Select("*").From(table).ToSql()
return query, args, err
case "update":
query, args, err := sq.
Update(table).
Set("email", user.Email).Set("username", user.Username).
Where("id = ?", user.ID).ToSql()
return query, args, err
case "delete":
query, args, err := sq.
Delete(table).
Where("id = ?", user.ID).
ToSql()
return query, args, err
}
return "", nil, nil
}
func main() {