本笔记将介绍如何使用gin和gorm来实现简单的用户登录和注册功能。Gin是一个用于构建Web应用程序的轻量级框架,而Gorm是Go语言的ORM框架,用于处理数据库操作。
步骤一:安装Gin和Gorm
首先,我们需要使用 Go 模块管理工具来安装 Gin 和 GORM。在终端中执行以下命令:
go get -u github.com/gin-gonic/gin
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
步骤二:创建数据库和模型
我们首先需要在数据库中创建一个用于存储用户信息的表。假设我们有一个名为 users 的表,包含 id、username 和 password 字段。接下来,我们创建相应的 GORM 模型:
type User struct {
ID uint `gorm:"primaryKey"`
Username string `gorm:"unique"`
Password string
}
// 迁移(创建表)
func Migrate(db *gorm.DB) {
db.AutoMigrate(&User{})
}
步骤三:初始化Gin和数据库连接
在main函数中,我们初始化Gin和数据库连接,并进行路由设置:
func main() {
// 连接数据库
dsn := "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal("Failed to connect to database")
}
Migrate(db) // 执行迁移
// 初始化 Gin
r := gin.Default()
// 设置路由
r.POST("/register", Register)
r.POST("/login", Login)
// 启动服务器
r.Run(":8080")
}
步骤四:注册功能
实现用户注册功能,当用户访问 /register 路由时,将接收 POST 请求,解析请求体中的 JSON 数据,然后将用户信息插入数据库
func Register(c *gin.Context) {
var newUser User
if err := c.BindJSON(&newUser); err != nil {
c.JSON(400, gin.H{"error": "Invalid input"})
return
}
// 在数据库中创建新用户
if err := db.Create(&newUser).Error; err != nil {
c.JSON(500, gin.H{"error": "Failed to create user"})
return
}
c.JSON(200, gin.H{"message": "User registered successfully"})
}
步骤五:登陆功能
实现用户登录功能,当用户访问 /login 路由时,将接收 POST 请求,解析请求体中的 JSON 数据,然后查询数据库验证用户信息:
func Login(c *gin.Context) {
var inputUser User
if err := c.BindJSON(&inputUser); err != nil {
c.JSON(400, gin.H{"error": "Invalid input"})
return
}
var dbUser User
if err := db.Where("username = ?", inputUser.Username).First(&dbUser).Error; err != nil {
c.JSON(401, gin.H{"error": "User not found"})
return
}
if inputUser.Password != dbUser.Password {
c.JSON(401, gin.H{"error": "Invalid password"})
return
}
c.JSON(200, gin.H{"message": "Login successful"})
}
总结
通过以上步骤,我们已经成功使用 Gin 和 GORM 实现了一个简单的用户登录和注册功能。当用户访问 /register 路由时,会注册新用户到数据库;当用户访问 /login 路由时,会验证用户信息并进行登录。