Trong Golang, việc triển khai mô hình MVC (Model-View-Controller) giúp tổ chức mã nguồn một cách rõ ràng, dễ duy trì và phát triển. Mô hình MVC chia ứng dụng thành ba thành phần chính: Model, View, và Controller. Mỗi thành phần đảm nhận một nhiệm vụ cụ thể, giúp ứng dụng dễ dàng mở rộng và quản lý.
Dưới đây là các bước chi tiết để xây dựng mô hình MVC cơ bản trong Go.
Trước khi bắt đầu, bạn cần cài đặt Go trên máy tính của mình. Sau đó, tạo một thư mục dự án với cấu trúc sau:
myapp/ ├── controllers/ │ └── user_controller.go ├── models/ │ └── user.go ├── views/ │ └── user.html ├── main.go ├── go.mod └── go.sum
Trong thư mục gốc của dự án, khởi tạo module Go bằng lệnh sau:
go mod init myapp
Điều này sẽ tạo tệp go.mod
, quản lý các thư viện bên ngoài và phiên bản Go.
Model là nơi bạn định nghĩa các cấu trúc dữ liệu và logic nghiệp vụ của ứng dụng. Trong Golang, một model thường là một struct.
Ví dụ: Tạo một model User
trong file models/user.go
:
package models // User struct đại diện cho một người dùng type User struct { ID int Name string Email string } // Lấy danh sách người dùng (đây chỉ là ví dụ với dữ liệu tĩnh) func GetAllUsers() []User { users := []User{ {ID: 1, Name: "Anh", Email: "[email protected]"}, {ID: 2, Name: "Em", Email: "[email protected]"}, } return users }
Hàm GetAllUsers()
trả về danh sách người dùng tĩnh để đơn giản hóa ví dụ.
Controller là nơi xử lý các yêu cầu từ người dùng, giao tiếp với Model và trả về View.
Tạo file controllers/user_controller.go
:
package controllers import ( "myapp/models" "net/http" "html/template" ) // Hiển thị danh sách người dùng func GetUsers(w http.ResponseWriter, r *http.Request) { users := models.GetAllUsers() tmpl, err := template.ParseFiles("views/user.html") if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } tmpl.Execute(w, users) }
Hàm GetUsers
sẽ gọi đến GetAllUsers()
trong Model để lấy dữ liệu, sau đó hiển thị dữ liệu đó trong view user.html
.
View là phần hiển thị giao diện người dùng. Trong Golang, bạn có thể sử dụng các template HTML để hiển thị dữ liệu.
Tạo file views/user.html
:
<!DOCTYPE html> <html> <head> <title>Danh sách người dùng</title> </head> <body> <h1>Danh sách người dùng</h1> <ul> {{range .}} <li>{{.Name}} - {{.Email}}</li> {{end}} </ul> </body> </html>
Template này sẽ lặp qua danh sách người dùng và hiển thị tên và email của mỗi người.
Trong file main.go
, chúng ta sẽ sử dụng net/http để khởi tạo server và routing cho ứng dụng.
package main import ( "myapp/controllers" "net/http" ) func main() { // Định nghĩa route http.HandleFunc("/users", controllers.GetUsers) // Khởi động server http.ListenAndServe(":8080", nil) }
Ở đây, khi người dùng truy cập vào /users
, hàm GetUsers
trong controllers/user_controller.go
sẽ được gọi để hiển thị danh sách người dùng.
Mở terminal, điều hướng vào thư mục dự án, và chạy lệnh:
go run main.go
Truy cập vào http://localhost:8080/users, bạn sẽ thấy danh sách người dùng được hiển thị.
http.HandleFunc
để định tuyến yêu cầu đến các hàm controller tương ứng. Trong các ứng dụng lớn, bạn có thể sử dụng các framework như Gin, Echo để có hệ thống router mạnh mẽ hơn.html/template
, giúp bạn dễ dàng sử dụng các template để hiển thị dữ liệu.Mô hình MVC trong Golang cung cấp một cách tiếp cận rõ ràng và dễ bảo trì để phát triển ứng dụng web. Mặc dù ví dụ trên là một mô hình MVC đơn giản, bạn có thể mở rộng nó bằng cách thêm cơ sở dữ liệu, xác thực người dùng và các tính năng khác để xây dựng ứng dụng thực tế.
Chúc các bạn học tập hiệu quả!