第十六章 go语言编写MVC程序操作数据库
下面是一个使用 Go 语言编写 MVC 三层架构的项目示例,其中包括了 Service 层接口的定义和实现,数据操作框架使用 GORM,前端交互使用 Gin 框架。
首先,确保已经安装了 gin 和 gorm 的相关包:
go get -u github.com/gin-gonic/gin go get -u gorm.io/gorm go get -u gorm.io/driver/mysql # 如果你使用 MySQL 数据库
创建以下目录结构:
- main.go - controllers/ - user_controller.go - models/ - user_model.go - services/ - user_service.go - repositories/ - user_repository.go
在 models 目录下的 user_model.go 中添加以下内容:
package models
type User struct {
//gorm.Model
ID uint `gorm:"column:id;primary_key"`
UserName string `gorm:"column:user_name"`
address string `gorm:"column:address"`
}
在 repositories 目录下的 user_repository.go 中添加以下内容:
package repositories
import (
"gorm.io/gorm"
"go_demo2/models"
)
type UserRepository struct {
DB *gorm.DB
}
func NewUserRepository(db *gorm.DB) *UserRepository {
return &UserRepository{
DB: db,
}
}
func (r *UserRepository) GetAllUsers()([]models.User,error) {
var users[] models.User
result :=r.DB.Find(&users)
if result.Error != nil {
return nil,result.Error
}
return users,nil
}
在 services 目录下的 user_service.go 中添加以下内容:
package services
import (
"go_demo2/models"
"go_demo2/repositories"
)
type UserService struct {
UserRepository * repositories.UserRepository
}
func NewUserService(userRepo *repositories.UserRepository) *UserService {
return &UserService{
UserRepository: userRepo,
}
}
func (s *UserService) GetAllUsers() ([]models.User,error) {
users,err := s.UserRepository.GetAllUsers()
if err != nil{
return nil,err
}
return users,nil
}
在 controllers 目录下的 user_controller.go 中添加以下内容:
package controller
import (
"github.com/gin-gonic/gin"
"go_demo2/services"
)
type UserController struct {
UserService *services.UserService
}
func NewUserController( userService *services.UserService) *UserController {
return &UserController{
UserService: userService,
}
}
func (c *UserController) GetAllUsers(ctx *gin.Context) {
users,err := c.UserService.GetAllUsers()
if err!=nil {
ctx.JSON(500,gin.H{"error":"没有数据"})
}
ctx.JSON(200,users)
}
在 main.go 文件中添加以下内容:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"go_demo2/services"
"go_demo2/repositories"
"go_demo2/controller"
)
func createConnection()( db *gorm.DB,err error) {
dsn := "root:root@tcp(127.0.0.1:3306)/golang?charset=utf8mb4&parseTime=True&loc=Local"
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
//panic("Failed to connect to database")
return nil,err
}
return db,nil
}
func main() {
r := gin.Default()
db,err := createConnection()
if err!=nil{
fmt.Println(err)
panic("无法连接到数据库")
}
userRepo := repositories.NewUserRepository(db)
useService := services.NewUserService(userRepo)
userController := controller.NewUserController(useService)
r.GET("/users",userController.GetAllUsers)
r.Run(":8099")
}
上述示例中,我们将数据操作封装到了 Repository 层,业务逻辑处理放在了 Service 层,控制器负责处理路由请求。这样可以实现 MVC 三层架构。
在 main.go 文件中,根据你的数据库信息修改 createConnection 函数中的连接字符串。
运行该项目:
go run main.go
然后在浏览器中访问 http://localhost:8080/users,将返回用户数据的 JSON 格式响应。
这只是一个简单的示例,你可以根据你的需求和业务逻辑进行修改和扩展。希望这能帮助你开始构建基于 GORM 和 Gin 的 MVC 三层架构项目


浙公网安备 33010602011771号