Rumah >pembangunan bahagian belakang >Golang >Prinsip pelaksanaan kod sumber rangka kerja Golang

Prinsip pelaksanaan kod sumber rangka kerja Golang

WBOY
WBOYasal
2024-06-05 12:00:57616semak imbas

Analisis prinsip pelaksanaan kod sumber rangka kerja Go adalah seperti berikut: Penghalaan HTTP menggunakan pepohon awalan dalam pakej mux untuk mentakrifkan peraturan penghalaan antara kaedah permintaan, laluan URI dan pengendali. Middleware ditakrifkan melalui HandlerFunc, membenarkan logik tersuai seperti pengesahan dan pengelogan dilakukan sebelum atau selepas pemprosesan permintaan.

Prinsip pelaksanaan kod sumber rangka kerja Golang

Prinsip pelaksanaan kod sumber rangka kerja Go

Prakata

Artikel ini akan menyelidiki prinsip pelaksanaan kod sumber rangka kerja Go untuk membantu anda memahami mekanisme kerja dalamannya. Melalui kes praktikal, kami akan menumpukan pada pelaksanaan khusus penghalaan HTTP dan mekanisme perisian tengah.

Penghalaan HTTP

Analisis kod sumber

Komponen teras penghalaan HTTP dalam rangka kerja Go ialah pakej mux. Ia menyediakan cara yang fleksibel untuk menentukan peraturan penghalaan, termasuk kaedah permintaan, laluan URI dan pengendali. mux 包。它提供了一种灵活的方式来定义路由规则,包括请求方法、URI 路径和处理程序。

package mux

type Router struct {
    trees map[string]*routeNode
    // 其他字段 ...
}

Router 类型维护了一个 trees 字段,其中包含一个前缀树映射,每个前缀对应一个 routeNode

实战案例

import (
    "github.com/go-chi/chi/v5"
)

// 定义一个基本的 Go 框架路由器
r := chi.NewRouter()
r.Get("/users", handler)

// 运行服务器,监听端口 8080
http.ListenAndServe(":8080", r)

在这种情况下,/users 请求将被路由到名为 handler 的请求处理程序。

中间件

源码解析

Go 框架中的中间件允许在处理请求之前或之后执行一些自定义逻辑。典型的中间件包括身份验证、记录和跨域资源共享 (CORS)。

package middleware

type HandlerFunc func(http.Handler) http.Handler

HandlerFunc 类型定义了一个中间件函数,它接受一个 http.Handler 并返回另一个 http.Handler

import (
    "github.com/go-chi/chi/v5/middleware"
)

// 创建一个名为 `MyMiddleware` 的中间件
func MyMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // 在请求处理之前执行自定义逻辑
        w.Header().Set("X-Custom-Header", "value")
        next.ServeHTTP(w, r)
        // 在请求处理之后执行自定义逻辑
    })
}

// 将中间件添加到路由器
r.Use(middleware.MyMiddleware())

Jenis Router mengekalkan medan trees, yang mengandungi pemetaan pokok awalan, setiap awalan sepadan dengan routeNode.

Kes praktikal

rrreee

Dalam kes ini, permintaan /users akan dihalakan kepada pengendali permintaan bernama pengendali. 🎜🎜Middleware🎜🎜Source code parsing🎜🎜Middleware dalam rangka kerja Go membolehkan melakukan beberapa logik tersuai sebelum atau selepas memproses permintaan. Perisian tengah biasa termasuk pengesahan, pengelogan dan perkongsian sumber silang asal (CORS). 🎜rrreee🎜Jenis HandlerFunc mentakrifkan fungsi middleware yang menerima http.Handler dan mengembalikan http.Handler yang lain. 🎜🎜Kes praktikal🎜rrreee🎜Perisian tengah ini akan menetapkan X-Custom-Header kepada "nilai" sebelum setiap permintaan. 🎜

Atas ialah kandungan terperinci Prinsip pelaksanaan kod sumber rangka kerja Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn