golang が MVC アーキテクチャを実装する方法
MVC (モデル ビュー コントローラー) は、アプリケーションを 3 つのコア部分 (モデル、ビュー、コントローラー) に分割する、一般的に使用されるソフトウェア アーキテクチャ パターンです。この分離により、アプリケーションの保守性、拡張性、再利用性が向上します。 Golang では、MVC アーキテクチャを簡単に実装できます。
1. MVC の概要
1.1 モデル
モデル層はアプリケーションの中核部分であり、主にデータ関連の操作の処理を担当します。モデル層には次のコンテンツを含めることができます。
1.1.1 データベース接続
モデル層の主な仕事は、データベースと対話することです。 Golang では、公式に提供されているデータベース/SQL ライブラリを使用してリレーショナル データベースに接続できます。例:
import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "user:password@tcp(host:port)/dbname") // ... }
1.1.2 データベース操作
データベース/SQL ライブラリを通じて、さまざまなデータベース操作を実行できます。たとえば、データベース内のテーブルをクエリします。
rows, err := db.Query("SELECT * FROM users") defer rows.Close() for rows.Next() { var id int var username string var password string err := rows.Scan(&id, &username, &password) // ... }
1.2 View
View レイヤーは、データ (通常は HTML ページ) を表示する役割を果たします。 Golang では、HTML テンプレート エンジンを使用して View レイヤーを構築できます。例:
import ( "html/template" ) type User struct { Username string Password string } func main() { tpl := template.Must(template.ParseFiles("template.html")) user := User{ Username: "user", Password: "password", } tpl.Execute(w, user) }
1.3 コントローラー
コントローラー層は、ユーザーのリクエストを処理し、リクエストをモデル層とビュー層に転送する役割を果たします。 Golang では、HTTP ルーターを使用してコントローラー層の機能を実装できます。例:
import ( "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { // 处理用户请求 // ... } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }
2. Golang は MVC
2.1 モデル層を実装します
Golang では、struct を使用してモデル層のデータ構造を定義できます。次に例を示します。
type User struct { ID int Username string Password string }
例:
type UserRepository interface { FindByID(id int) (*User, error) FindAll() ([]*User, error) Store(user *User) error Delete(id int) error }
次に、UserRepository インターフェイスを実装することで、モデル層のメソッドを具体的に実装できます。例:
type UserRepositoryImpl struct { db *sql.DB } func NewUserRepository(db *sql.DB) *UserRepositoryImpl { return &UserRepositoryImpl{ db: db, } } func (r *UserRepositoryImpl) FindByID(id int) (*User, error) { var user *User err := r.db.QueryRow("SELECT * FROM users WHERE id = ?", id). Scan(&user.ID, &user.Username, &user.Password) if err != nil { return nil, err } return user, nil } func (r *UserRepositoryImpl) FindAll() ([]*User, error) { var users []*User rows, err := r.db.Query("SELECT * FROM users") if err != nil { return nil, err } for rows.Next() { var user User err := rows.Scan(&user.ID, &user.Username, &user.Password) if err != nil { return nil, err } users = append(users, &user) } return users, nil } func (r *UserRepositoryImpl) Store(user *User) error { stmt, err := r.db.Prepare("INSERT INTO users (username, password) VALUES (?, ?)") if err != nil { return err } _, err = stmt.Exec(user.Username, user.Password) if err != nil { return err } return nil } func (r *UserRepositoryImpl) Delete(id int) error { stmt, err := r.db.Prepare("DELETE FROM users WHERE id = ?") if err != nil { return err } _, err = stmt.Exec(id) if err != nil { return err } return nil }
2.2 ビュー レイヤー
Golang では、HTML テンプレート エンジンを使用してビュー レイヤーをレンダリングできます。例:
var tpl = ` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>{{.Title}}</title> </head> <body> <table> <thead> <tr> <th>ID</th> <th>Username</th> <th>Password</th> </tr> </thead> <tbody> {{range $index, $user := .Users}} <tr> <td>{{$user.ID}}</td> <td>{{$user.Username}}</td> <td>{{$user.Password}}</td> </tr> {{end}} </tbody> </table> </body> </html> ` type PageData struct { Title string Users []*User } func handler(w http.ResponseWriter, r *http.Request) { userRepository := NewUserRepository(db) users, err := userRepository.FindAll() if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } data := PageData{ Title: "Users", Users: users, } tpl := template.Must(template.New("index").Parse(tpl)) err = tpl.Execute(w, data) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }
2.3 コントローラー レイヤー
Golang では、HTTP ルーターを使用してユーザー リクエストを処理できます。例:
func handler(w http.ResponseWriter, r *http.Request) { // 处理用户请求 // ... } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }
また、gorilla/mux ライブラリを使用して高度なルーティング機能を実装することもできます。例:
func handler(w http.ResponseWriter, r *http.Request) { // 处理用户请求 // ... } func main() { r := mux.NewRouter() r.HandleFunc("/", handler) r.HandleFunc("/users/{id}", getUser).Methods(http.MethodGet) http.ListenAndServe(":8080", r) } func getUser(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) id, _ := strconv.Atoi(vars["id"]) userRepository := NewUserRepository(db) user, err := userRepository.FindByID(id) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } json.NewEncoder(w).Encode(user) }
3. 結論
Golang で MVC アーキテクチャを実装することにより、アプリケーションのさまざまな部分を適切に分離し、保守性、拡張性、複雑性を向上させることができます。実装では、公式に提供されているデータベース/SQL ライブラリを使用してデータベースを操作し、HTML テンプレート エンジンを使用してページをレンダリングし、HTTP ルーターを使用してユーザー リクエストを処理できます。同時に、高度なルーティング機能を実装するためのゴリラ/マルチプレクサ ライブラリなど、サードパーティのライブラリを使用して高度な機能を実装することもできます。
以上がgolang が MVC アーキテクチャを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











OpenSSLは、安全な通信で広く使用されているオープンソースライブラリとして、暗号化アルゴリズム、キー、証明書管理機能を提供します。ただし、その歴史的バージョンにはいくつかの既知のセキュリティの脆弱性があり、その一部は非常に有害です。この記事では、Debian SystemsのOpenSSLの共通の脆弱性と対応測定に焦点を当てます。 Debianopensslの既知の脆弱性:OpenSSLは、次のようないくつかの深刻な脆弱性を経験しています。攻撃者は、この脆弱性を、暗号化キーなどを含む、サーバー上の不正な読み取りの敏感な情報に使用できます。

Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

バックエンド学習パス:フロントエンドからバックエンドへの探査の旅は、フロントエンド開発から変わるバックエンド初心者として、すでにNodeJSの基盤を持っています...

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

Beegoormフレームワークでは、モデルに関連付けられているデータベースを指定する方法は?多くのBEEGOプロジェクトでは、複数のデータベースを同時に操作する必要があります。 Beegoを使用する場合...

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

この記事では、Debianシステムの下でPostgreSQLデータベースを監視するためのさまざまな方法とツールを紹介し、データベースのパフォーマンス監視を完全に把握するのに役立ちます。 1. PostgreSQLを使用して監視を監視するビューPostgreSQL自体は、データベースアクティビティを監視するための複数のビューを提供します。 PG_STAT_REPLICATION:特にストリームレプリケーションクラスターに適した複製ステータスを監視します。 PG_STAT_DATABASE:データベースサイズ、トランザクションコミット/ロールバック時間、その他のキーインジケーターなどのデータベース統計を提供します。 2。ログ分析ツールPGBADGを使用します
