Golang MVC架构设计与实现

Golang MVC架构设计与实现 在不使用框架的情况下实现Golang MVC结构。需要一些帮助,在线教程似乎对我没有帮助,谢谢。 虽然我对beego框架很熟悉。

3 回复

谢谢兄弟的帮助

更多关于Golang MVC架构设计与实现的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我认为Jon Calhoun在UseGolang.com上的Web应用程序教程做得非常出色。不过,价格并不便宜。作为一个编程和Web开发的新手,这个教程帮助我从超级基础的示例进阶到了解使用MVC结构的生产级应用可能是什么样子。

在Go语言中实现MVC(Model-View-Controller)架构无需依赖外部框架,可以通过标准库和合理的设计来完成。以下是一个基本实现示例,展示如何组织代码结构并处理HTTP请求。

项目结构

project/
├── main.go
├── controllers/
│   └── user_controller.go
├── models/
│   └── user.go
└── views/
    └── user_view.go

1. Model层(models/user.go)

Model负责数据结构和业务逻辑。

package models

type User struct {
    ID   int    `json:"id"`
    Name string `json:"name"`
}

func GetUserByID(id int) *User {
    // 模拟从数据库获取用户数据
    return &User{ID: id, Name: "John Doe"}
}

2. View层(views/user_view.go)

View负责数据展示,这里使用JSON作为示例。

package views

import (
    "encoding/json"
    "net/http"
)

func RenderJSON(w http.ResponseWriter, data interface{}) {
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(data)
}

3. Controller层(controllers/user_controller.go)

Controller处理HTTP请求,协调Model和View。

package controllers

import (
    "net/http"
    "strconv"
    "your_project/models"
    "your_project/views"
)

type UserController struct{}

func (uc *UserController) GetUser(w http.ResponseWriter, r *http.Request) {
    idStr := r.URL.Query().Get("id")
    id, err := strconv.Atoi(idStr)
    if err != nil {
        http.Error(w, "Invalid user ID", http.StatusBadRequest)
        return
    }

    user := models.GetUserByID(id)
    views.RenderJSON(w, user)
}

4. 路由和主程序(main.go)

使用net/http设置路由并启动服务器。

package main

import (
    "net/http"
    "your_project/controllers"
)

func main() {
    userController := &controllers.UserController{}

    http.HandleFunc("/user", userController.GetUser)
    http.ListenAndServe(":8080", nil)
}

运行和测试

启动服务器后,通过浏览器或curl访问:

curl "http://localhost:8080/user?id=1"

输出:

{"id":1,"name":"John Doe"}

关键点说明

  • 分离关注点:Model、View、Controller各司其职,便于维护和测试。
  • 灵活性:可以轻松替换View层(如改用HTML模板)或Model层(连接真实数据库)。
  • 扩展性:根据需要添加中间件、验证等功能。

此实现提供了MVC的核心结构,可根据具体需求进一步优化,例如添加路由库或依赖注入。

回到顶部