Go フレームワークは、Go の組み込みライブラリを拡張するコンポーネントのセットで、事前に構築された機能 (Web 開発やデータベース操作など) を提供します。人気のある Go フレームワークには、Gin (Web 開発)、GORM (データベース操作)、RESTful (API 管理) などがあります。ミドルウェアは、HTTP リクエスト処理チェーン内のインターセプター パターンであり、ハンドラーを変更せずに認証やリクエスト ロギングなどの機能を追加するために使用されます。セッション管理は、ユーザー データを保存することでセッション状態を維持します。ゴリラ/セッションを使用してセッションを管理できます。
Go フレームワークの面接質問集
面接の準備は、特に Go フレームワークのようなテクノロジー スタックの場合、ソフトウェア開発プロセスの重要な部分です。この記事では、Go フレームワークの面接でよくある質問のリストをまとめ、次の面接の準備に役立つ実用的なコード例を示します。
1. Go フレームワークについて説明します
答え: Go フレームワークは、一般的なタスクを処理するための事前構築されたコンポーネントと構造を提供する、Go 言語の拡張された組み込みライブラリのコレクションです。これらのフレームワークには、Web 開発、データベース操作、API 管理などの機能のモジュールが含まれています。
2. 人気のある Go フレームワークをいくつか挙げてください
答え:
- Web 開発: Gin、Echo、Gorilla
- データベース操作: GORM、xORM、SQLx
- API管理者: RESTful、Beego、Buffalo
3. ミドルウェアの役割を説明します
答え: ミドルウェアは、HTTP リクエスト処理チェーンでカスタム コードを実行するために使用されるインターセプター パターンです。これにより、ハンドラー自体を変更せずに、認証、認可、要求ログなどの機能を追加できます。
4. Jin でミドルウェアを使用する方法
package main import ( "github.com/gin-gonic/gin" "golang.org/x/time/rate" "time" ) func main() { r := gin.Default() // 创建一个每秒允许 5 个请求的速率限制器 limiter := rate.NewLimiter(5, 5) // 定义一个中间件,它使用速率限制器检查每个请求 middleware := func(c *gin.Context) { if !limiter.Allow() { c.AbortWithStatus(http.StatusTooManyRequests) return } // 继续处理请求 c.Next() } // 将中间件应用到所有路由 r.Use(middleware) r.Run() }
5. Go Web アプリケーションにおけるセッション管理の役割を説明します
答え: セッション管理により、アプリケーションはユーザー セッション情報を保存および取得できます。これは、ログイン状態を維持し、ショッピング カートの内容やその他のユーザー固有のデータを追跡するために不可欠です。
6. ゴリラ/セッションを使用してセッションを管理する
package main import ( "fmt" "github.com/gorilla/sessions" "github.com/gorilla/mux" "log" "net/http" ) const ( SessionName = "session-name" CookieName = "session-id" Secret = "secret-key" ) var ( sessionStore *sessions.CookieStore ) func main() { // 创建 session 存储 sessionStore = sessions.NewCookieStore([]byte(Secret)) // 创建路由器 r := mux.NewRouter() r.HandleFunc("/login", loginHandler) r.HandleFunc("/profile", profileHandler) // 启动服务器 log.Fatal(http.ListenAndServe(":8080", r)) } // loginHandler 处理登录请求并创建 session func loginHandler(w http.ResponseWriter, r *http.Request) { // 创建 session session, err := sessionStore.Get(r, SessionName) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } // 将用户 ID 设置为 session 数据 session.Values["user_id"] = 10 // 保存 session if err = sessionStore.Save(r, w, session); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } // 重定向到个人资料页面 http.Redirect(w, r, "/profile", http.StatusFound) } // profileHandler 处理个人资料请求并检索 session 数据 func profileHandler(w http.ResponseWriter, r *http.Request) { // 获取 session session, err := sessionStore.Get(r, SessionName) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } // 从 session 中检索用户 ID userID, ok := session.Values["user_id"].(int) if !ok { http.Error(w, "Invalid user ID in session", http.StatusBadRequest) return } // 使用用户 ID 渲染个人资料页面 fmt.Fprintf(w, "Your profile page, user ID: %d", userID) }
以上がGolang フレームワークの面接質問集の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。