Maison > développement back-end > Golang > le corps du texte

Collection de questions d'entretien sur le cadre Golang

WBOY
Libérer: 2024-06-02 21:37:01
original
727 Les gens l'ont consulté

Le framework Go est un ensemble de composants qui étendent les bibliothèques intégrées de Go, fournissant des fonctionnalités prédéfinies (telles que le développement Web et les opérations de base de données). Les frameworks Go populaires incluent Gin (développement Web), GORM (opérations de base de données) et RESTful (gestion des API). Le middleware est un modèle d'intercepteur dans la chaîne de traitement des requêtes HTTP, utilisé pour ajouter des fonctionnalités telles que l'authentification ou la journalisation des requêtes sans modifier le gestionnaire. La gestion des sessions maintient l'état de la session en stockant les données utilisateur. Vous pouvez utiliser gorilla/sessions pour gérer les sessions.

Collection de questions dentretien sur le cadre Golang

Collection de questions d'entretien sur le framework Go

La préparation à l'entretien est une partie cruciale du processus de développement logiciel, en particulier pour une pile technologique comme le framework Go. Cet article compile une collection de questions d'entretien courantes sur le framework Go et fournit des exemples de code pratiques pour vous aider à préparer votre prochain entretien.

1. Expliquez le framework Go

Réponse : Le framework Go est une collection améliorée de bibliothèques intégrées dans le langage Go qui fournit des composants et des structures prédéfinis pour gérer les tâches courantes. Ces frameworks contiennent des modules pour des fonctions telles que le développement Web, les opérations de base de données et la gestion des API.

2. Listez quelques frameworks Go populaires

Réponse :

  • Développement Web : Gin, Echo, Gorilla
  • Opérations de base de données : GORM, xORM, SQLx
  • Gestion des API : RESTful, Beego, Buffalo

3. Expliquez le rôle du middleware

Réponse : Le middleware est un modèle d'intercepteur utilisé pour exécuter du code personnalisé dans la chaîne de traitement des requêtes HTTP. Il vous permet d'ajouter des fonctionnalités telles que l'authentification, l'autorisation et la journalisation des demandes sans modifier le gestionnaire lui-même.

4. Comment utiliser le middleware dans Gin

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()
}
Copier après la connexion

5. Expliquez le rôle de la gestion de session dans les applications Web Go

Réponse : La gestion de session permet aux applications de stocker et de récupérer les utilisateurs lors d'une session utilisateur. Il est essentiel pour rester connecté, suivre le contenu du panier et d'autres données spécifiques à l'utilisateur.

6. Utilisez gorilla/sessions pour gérer les sessions

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)
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!