Rangka kerja Go ialah satu set komponen yang memperluaskan perpustakaan terbina dalam Go, menyediakan kefungsian pra-bina (seperti pembangunan web dan operasi pangkalan data). Rangka kerja Go yang popular termasuk Gin (pembangunan web), GORM (operasi pangkalan data) dan RESTful (pengurusan API). Middleware ialah corak pemintas dalam rantai pemprosesan permintaan HTTP, digunakan untuk menambah fungsi seperti pengesahan atau pengelogan permintaan tanpa mengubah suai pengendali. Pengurusan sesi mengekalkan status sesi dengan menyimpan data pengguna Anda boleh menggunakan gorila/sesi untuk mengurus sesi.
Koleksi soalan temuduga rangka kerja Go
Penyediaan temu bual ialah bahagian penting dalam proses pembangunan perisian, terutamanya untuk susunan teknologi seperti rangka kerja Go. Artikel ini mengumpulkan koleksi soalan temuduga rangka kerja Go biasa dan menyediakan contoh kod praktikal untuk membantu anda bersedia untuk temu duga anda yang seterusnya.
1. Terangkan Rangka Kerja Go
Jawapan: Rangka kerja Go ialah koleksi perpustakaan terbina dalam yang dipertingkatkan dalam bahasa Go yang menyediakan komponen dan struktur pra-bina untuk mengendalikan tugas biasa. Rangka kerja ini mengandungi modul untuk fungsi seperti pembangunan web, operasi pangkalan data dan pengurusan API.
2. Senaraikan beberapa rangka kerja Go yang popular
Jawapan:
RESTful, Beego, Buffalo
- Pembangunan web: Gin, Echo, Gorilla
- operasi, pangkalan data SQL
- Pengurusan API:
3. Terangkan peranan middleware
Jawapan:
Middleware ialah corak pemintas yang digunakan untuk melaksanakan kod tersuai dalam rantai pemprosesan permintaan HTTP. Ia membolehkan anda menambah fungsi seperti pengesahan, kebenaran dan pengelogan permintaan tanpa mengubah suai pengendali itu sendiri.
4. Cara menggunakan middleware dalam Ginpackage 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()
}
Jawapan:
Pengurusan sesi membolehkan pengguna menyimpan dan mendapatkan semula maklumat. Ia penting untuk kekal log masuk, menjejak kandungan troli beli-belah dan data khusus pengguna yang lain.
6 Gunakan gorila/sesi untuk menguruskan sesi🎜🎜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) }
Atas ialah kandungan terperinci Koleksi soalan temuduga kerangka Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!