Оцініть цю публікацію!
[Усього: 0 Середнє значення: 0]

Веб-застосунок, який використовує фреймворк Gin для створення API для збереження та отримання користувацьких даних в базі даних SQLite. Для цього потрібно встановити бібліотеку Gin, використовуючи go get
:
go get -u github.com/gin-gonic/gin
Ось код веб-застосунку:
package main
import (
"database/sql"
"fmt"
"log"
"net/http"
"github.com/gin-gonic/gin"
_ "github.com/mattn/go-sqlite3"
)
var db *sql.DB
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
}
func main() {
// Ініціалізація бази даних SQLite
var err error
db, err = sql.Open("sqlite3", "./users.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// Створення таблиці користувачів, якщо її ще немає
_, err = db.Exec(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
email TEXT
)
`)
if err != nil {
log.Fatal(err)
}
// Ініціалізація роутера Gin
router := gin.Default()
// Додавання роутів
router.GET("/users", getUsers)
router.POST("/users", addUser)
// Запуск сервера на порту 8080
err = router.Run(":8080")
if err != nil {
log.Fatal(err)
}
}
func getUsers(c *gin.Context) {
var users []User
// Отримання списку користувачів з бази даних
rows, err := db.Query("SELECT id, name, email FROM users")
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Помилка отримання користувачів"})
return
}
defer rows.Close()
// Читання результатів запиту
for rows.Next() {
var user User
err := rows.Scan(&user.ID, &user.Name, &user.Email)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Помилка читання користувачів"})
return
}
users = append(users, user)
}
// Відправка списку користувачів у форматі JSON
c.JSON(http.StatusOK, users)
}
func addUser(c *gin.Context) {
var user User
// Зчитування даних від користувача
if err := c.ShouldBindJSON(&user); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Невірні дані користувача"})
return
}
// Додавання нового користувача до бази даних
result, err := db.Exec("INSERT INTO users (name, email) VALUES (?, ?)", user.Name, user.Email)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Помилка додавання користувача"})
return
}
// Отримання ID нового користувача
userID, err := result.LastInsertId()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Помилка отримання ID користувача"})
return
}
user.ID = int(userID)
// Відправка відповіді з новим користувачем у форматі JSON
c.JSON(http.StatusCreated, user)
}
package main
import (
"database/sql"
"fmt"
"log"
"net/http"
"github.com/gin-gonic/gin"
_ "github.com/mattn/go-sqlite3"
)
var db *sql.DB
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
}
func main() {
// Ініціалізація бази даних SQLite
var err error
db, err = sql.Open("sqlite3", "./users.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// Створення таблиці користувачів, якщо її ще немає
_, err = db.Exec(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
email TEXT
)
`)
if err != nil {
log.Fatal(err)
}
// Ініціалізація роутера Gin
router := gin.Default()
// Додавання роутів
router.GET("/users", getUsers)
router.POST("/users", addUser)
// Запуск сервера на порту 8080
err = router.Run(":8080")
if err != nil {
log.Fatal(err)
}
}
func getUsers(c *gin.Context) {
var users []User
// Отримання списку користувачів з бази даних
rows, err := db.Query("SELECT id, name, email FROM users")
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Помилка отримання користувачів"})
return
}
defer rows.Close()
// Читання результатів запиту
for rows.Next() {
var user User
err := rows.Scan(&user.ID, &user.Name, &user.Email)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Помилка читання користувачів"})
return
}
users = append(users, user)
}
// Відправка списку користувачів у форматі JSON
c.JSON(http.StatusOK, users)
}
func addUser(c *gin.Context) {
var user User
// Зчитування даних від користувача
if err := c.ShouldBindJSON(&user); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Невірні дані користувача"})
return
}
// Додавання нового користувача до бази даних
result, err := db.Exec("INSERT INTO users (name, email) VALUES (?, ?)", user.Name, user.Email)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Помилка додавання користувача"})
return
}
// Отримання ID нового користувача
userID, err := result.LastInsertId()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Помилка отримання ID користувача"})
return
}
user.ID = int(userID)
// Відправка відповіді з новим користувачем у форматі JSON
c.JSON(http.StatusCreated, user)
}
package main import ( "database/sql" "fmt" "log" "net/http" "github.com/gin-gonic/gin" _ "github.com/mattn/go-sqlite3" ) var db *sql.DB type User struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"` } func main() { // Ініціалізація бази даних SQLite var err error db, err = sql.Open("sqlite3", "./users.db") if err != nil { log.Fatal(err) } defer db.Close() // Створення таблиці користувачів, якщо її ще немає _, err = db.Exec(` CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT ) `) if err != nil { log.Fatal(err) } // Ініціалізація роутера Gin router := gin.Default() // Додавання роутів router.GET("/users", getUsers) router.POST("/users", addUser) // Запуск сервера на порту 8080 err = router.Run(":8080") if err != nil { log.Fatal(err) } } func getUsers(c *gin.Context) { var users []User // Отримання списку користувачів з бази даних rows, err := db.Query("SELECT id, name, email FROM users") if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Помилка отримання користувачів"}) return } defer rows.Close() // Читання результатів запиту for rows.Next() { var user User err := rows.Scan(&user.ID, &user.Name, &user.Email) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Помилка читання користувачів"}) return } users = append(users, user) } // Відправка списку користувачів у форматі JSON c.JSON(http.StatusOK, users) } func addUser(c *gin.Context) { var user User // Зчитування даних від користувача if err := c.ShouldBindJSON(&user); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Невірні дані користувача"}) return } // Додавання нового користувача до бази даних result, err := db.Exec("INSERT INTO users (name, email) VALUES (?, ?)", user.Name, user.Email) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Помилка додавання користувача"}) return } // Отримання ID нового користувача userID, err := result.LastInsertId() if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Помилка отримання ID користувача"}) return } user.ID = int(userID) // Відправка відповіді з новим користувачем у форматі JSON c.JSON(http.StatusCreated, user) }
Цей код створює простий RESTful API для додавання користувачів та отримання списку користувачів. Запити можна виконувати за допомогою інструментів, таких як curl або Postman.