【golang学习笔记 gin 】1.1 路由封装和mysql 的使用封装

发布于:2025-09-10 ⋅ 阅读:(22) ⋅ 点赞:(0)

安装gin

go get -u github.com/gin-gonic/gin
go get -u github.com/go-sql-driver/mysql

创建相关目录

gotest
 ->conifg
   ->database.go
   ->redis.go
 ->controller 
   ->index.go
 ->model
   ->user.go
 ->router
   ->router.go
 main.go 

在这里插入图片描述

创建用户模型

package model
import (
	"gotest/config"
)
type User struct {
    ID   int    `json:"id"`
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func GetUsers() ([]User, error) {
    var users []User 
    rows, err :=config.DB.Query("SELECT id, name, age FROM users")
    if err != nil {
       return nil, err
    }
    defer rows.Close()
  
    for rows.Next() {
        var user User
        if err := rows.Scan(&user.ID, &user.Name, &user.Age); err != nil {
             return nil, err
        }
        users = append(users, user)
    }
     return users, nil
}
//插入
func InsertUser(user *User) (int, error) {
    result, err := config.DB.Exec("INSERT INTO users(name, age) VALUES(?,?)", user.Name, user.Age)
    if err != nil {
        return  0, err
    }
    id,err := result.LastInsertId() // 获取最后插入的ID
    if err != nil {
        return  0, err
    }
    return int(id),nil
}
//更新
func UpdateUser(user *User) (int, error) {
    result, err := config.DB.Exec("UPDATE users SET name=?, age=? WHERE id=?", user.Name, user.Age, user.ID)
    if err != nil {
         return  0, err
    }
    rowsAffected, err := result.RowsAffected() // 获取影响的行数
    if rowsAffected == 0 {
        return  0, err
    }
    return int(rowsAffected),nil
}
//删除
func DeleteUser(id int)  (int, error) {
    result, err := config.DB.Exec("DELETE FROM users WHERE id=?", id)
    if err != nil {
         return  0, err
    }
    rowsAffected, err := result.RowsAffected() // 获取影响的行数
    if rowsAffected == 0 {
        return  0, err
    }
    return int(rowsAffected),nil
}

封装mysql连接

package config

import (
	"database/sql"
	"log"
	_ "github.com/go-sql-driver/mysql" // 导入MySQL驱动
)

var DB *sql.DB

func InitDB() {
	var err error
    dsn := "root:root@tcp(localhost:3306)/test?charset=utf8mb4&parseTime=True&loc=Local" // 替换为你的数据库信息
    DB, err = sql.Open("mysql", dsn)
    if err != nil {
        log.Fatalf("Error opening database: %v", err)
    }
    err = DB.Ping()
    if err != nil {
        log.Fatalf("Error pinging database: %v", err)
    }
    log.Println("Connected to database")
}

main.go

package main
import (
	"gotest/router"
	"gotest/config"
)
func main() {
    config.InitDB() // 初始化数据库连接
	r := router.SetupRouter() // 使用路由设置函数来初始化路由和中间件等。
	r.Run(":8080")            // 监听并在 0.0.0.0:8080 上启动服务。默认情况下,Gin使用的是HTTP协议。如果你需要HTTPS,可以使用`r.RunTLS(":8080", "certfile", "keyfile")`。
}

调用DB

package controller

import (
	"github.com/gin-gonic/gin"
	"gotest/config"
	"gotest/model"
)
//查列表
func UserHandler(c *gin.Context){
	 list,err :=model.GetUsers();
	if err != nil {
		c.JSON(500,gin.H{
			"message": "Error",
			"data":err.Error(),
		})
	}
	 c.JSON(200,gin.H{
		"message": "User List",
		"data":list,
	 })
}
func UserInsertHandler(c *gin.Context) {
	name := "adsdklss"
	age := 18
	user := &model.User{	
		Name: name,
		Age:  age,
	}
	id, err := model.InsertUser(user)
	if err != nil {
		c.JSON(500, gin.H{
			"message": "Error",
			"data": err.Error(),
		})
	}
	c.JSON(200, gin.H{
		"message": "Insert success",
		"data": id,
	})
}

func UserUpdateHandler(c *gin.Context) {
	name := "修改名字"
	age := 18
	user := &model.User{	
		Name: name,
		Age:  age,
		ID:   1,
	}
	id, err := model.UpdateUser(user)
	if err != nil {
		c.JSON(500, gin.H{
			"message": "Error",
			"data": err.Error(),
		})
	}
	c.JSON(200, gin.H{
		"message": "Update success",
		"data": id,
	})
}

func UserDelHandler(c *gin.Context) {
	 uid :=1;
	id, err := model.DeleteUser(uid)
	if err != nil {
		c.JSON(500, gin.H{
			"message": "Error",
			"data": err.Error(),
		})
	}
	c.JSON(200, gin.H{
		"message": "del success",
		"data": id,
	})
}

启动服务

   go run  main.go

网站公告

今日签到

点亮在社区的每一天
去签到