Golang의 인터셉터 마스터하기

王林
풀어 주다: 2024-04-07 21:33:02
원래의
621명이 탐색했습니다.

인터셉터를 사용하면 기존 코드를 수정하지 않고도 Go 애플리케이션에 사용자 정의 로직을 삽입할 수 있습니다. 인증, 로깅, 오류 처리, 성능 모니터링 등에 사용할 수 있습니다. 인터셉터를 생성하려면 HTTP 요청을 처리하기 위한 ServeHTTP() 메서드와 제어 전달을 위한 Next() 메서드를 정의하는 Handler 인터페이스를 구현해야 합니다. 실제 예제에서는 로깅 인터셉터를 사용하여 들어오는 모든 요청의 URL 경로를 기록하는 방법과 여러 인터셉터(예: 인증 인터셉터)를 함께 연결하여 복잡한 애플리케이션 논리를 생성하는 방법을 보여줍니다.

在 Golang 中驾驭拦截器

Golang에서 인터셉터 마스터하기

소개

인터셉터는 기존 코드를 수정하지 않고도 Golang 애플리케이션에 사용자 정의 로직을 내장할 수 있게 해주는 강력하고 유연한 메커니즘입니다. 인증, 로깅, 오류 처리, 성능 모니터링 등 다양한 목적으로 사용될 수 있습니다.

인터셉터 만들기

인셉터를 만들려면 Handler 인터페이스를 구현해야 합니다. 이 인터페이스는 두 가지 메소드를 정의합니다: Handler 接口。该接口定义了两个方法:

  • ServeHTTP(ResponseWriter, *Request):处理 HTTP 请求并生成响应。
  • Next(ResponseWriter, *Request)
    • ServeHTTP(ResponseWriter, *Request): HTTP 요청을 처리하고 응답을 생성합니다.
    • Next(ResponseWriter, *Request): 다음 핸들러나 인터셉터에 제어권을 전달합니다.

    다음은 인터셉터 생성의 예입니다.

    package main
    
    import (
        "fmt"
        "net/http"
    )
    
    func main() {
        // 创建一个简单的日志拦截器
        logger := func(next http.Handler) http.Handler {
            return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
                fmt.Printf("收到请求:%s\n", r.URL.Path)
                next.ServeHTTP(w, r)
            })
        }
    
        // 创建一个 HTTP 路由器并使用拦截器
        mux := http.NewServeMux()
        mux.Handle("/", logger(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            fmt.Fprintf(w, "Hello, world!")
        })))
    
        // 启动 HTTP 服务器
        http.ListenAndServe(":8080", mux)
    }
    로그인 후 복사
    실용 사례

    이 예에서는 콘솔에 들어오는 모든 요청의 URL 경로를 인쇄하는 역할을 하는 간단한 로그 인터셉터를 생성했습니다.

    여러 인터셉터 사용

    여러 인터셉터를 함께 연결하여 복잡한 애플리케이션 로직을 만들 수 있습니다. 예를 들어, 인증된 사용자만 특정 엔드포인트에 액세스할 수 있도록 하는 인증 인터셉터를 만들 수 있습니다.

    // 身份验证拦截器
    func auth(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            // 检查请求头中是否存在身份验证令牌
            if r.Header.Get("Authorization") == "" {
                http.Error(w, "未经授权", http.StatusUnauthorized)
                return
            }
    
            next.ServeHTTP(w, r)
        })
    }
    로그인 후 복사

    이 인터셉터를 다음과 같이 라우터에 추가할 수 있습니다. 🎜
    mux.Handle("/private", auth(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // 私有区域的逻辑
    })))
    로그인 후 복사

위 내용은 Golang의 인터셉터 마스터하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!