Dưới đây là các bước tạo một ứng dụng RESTful API đơn giản với Go, sử dụng Framework Gin, GORM và database MySQL. Ứng dụng gồm các chức năng đơn giản:
- Đăng ký
- Đăng nhập
- Chỉnh sửa Profile
Cấu trúc thư mục dự án
Tạo thư mục simple-restful-app cấu trúc như sau:
Cài đặt thư viện cho dự án
Chạy lệnh sau trong terminal mở tại thư mục dự án:
go mod init simple-restful-app go get -u github.com/gin-gonic/gin go get -u gorm.io/gorm go get -u gorm.io/drivermysql
Source code
File model/user.go:
package model type User struct { ID uint `gorm:"primaryKey" json:"id"` Name string `json:"name"` Email string `json:"email"` Password string `json:"password"` }
File database/db.go:
package database import ( "fmt" "simple-restful-app/model" "gorm.io/driver/mysql" "gorm.io/gorm" ) var DB *gorm.DB func Connect() { dsn := "root:ducphat1708@tcp(127.0.0.1:3306)/go_db?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { panic("Could not connect to the database" + err.Error()) } fmt.Println("Connected to the database successfully") DB = db } func Migrate() { DB.AutoMigrate(&model.User{}) }
File controller/user_controller.go:
package controller import ( "simple-restful-app/database" "simple-restful-app/model" "net/http" "strconv" "github.com/gin-gonic/gin" ) func Register(c *gin.Context) { var user model.User if err := c.ShouldBindJSON(&user); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } if err := database.DB.Create(&user).Error; err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Email đã tồn tại"}) return } c.JSON(http.StatusCreated, user) } func Login(c *gin.Context) { var input model.User var user model.User if err := c.ShouldBindJSON(&input); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } if err := database.DB.Where("email = ? AND password = ?", input.Email, input.Password).First(&user).Error; err != nil { c.JSON(http.StatusUnauthorized, gin.H{"error": "Sai email hoặc mật khẩu"}) return } c.JSON(http.StatusOK, gin.H{"message": "Đăng nhập thành công", "user": user}) } func UpdateUser(c *gin.Context) { id := c.Param("id") userID, _ := strconv.Atoi(id) var user model.User if err := database.DB.First(&user, userID).Error; err != nil { c.JSON(http.StatusNotFound, gin.H{"error": "Người dùng không tồn tại"}) return } var input model.User if err := c.ShouldBindJSON(&input); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } user.Name = input.Name user.Email = input.Email user.Password = input.Password database.DB.Save(&user) c.JSON(http.StatusOK, user) }
File main.go:
package main import ( "simple-restful-app/database" "simple-restful-app/controller" "github.com/gin-gonic/gin" ) func main() { // Khởi tạo database và migrate database.Connect() database.Migrate() r := gin.Default() r.POST("/register", controller.Register) r.POST("/login", controller.Login) r.PUT("/user/:id", controller.UpdateUser) r.Run(":8080") }
để chạy dự án, sử dụng lệnh:
go run main.go
hoặc sử dụng công cụ Run & Debug trong IDE
Test APi với Postman
Test POST /register: http://localhost:8080/register
Test POST /login: http://localhost:8080/login

Test PUT /user/1: http://localhost:8080/user/1
