Untitled
unknown
plain_text
a year ago
4.2 kB
5
Indexable
Never
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() {