목차
Gin 的 Context 源码" >Gin 的 Context 源码
Gin의 Context 소스 코드" >Gin의 Context 소스 코드
백엔드 개발 Golang 진 요청 프로세스 소스 코드 분석

진 요청 프로세스 소스 코드 분석

Aug 04, 2023 pm 05:26 PM
gin

표준 라이브러리의 http 서비스

Handler接口就可以注册到标准库的http server中。然后就会启动一个web应用。http请求流程当发生一个http请求的时候,在内部处理的流程是下面这样的:开启一个协程进行请求处理在conn.serve中调用serverHandler.ServeHTTP 函数如果有自己注册的Handle,那么就会调用注册的Handle的ServeHTTP 方法。这里还要注意的2个点如果自己在启动的时候没有注册自己的Handle,那么会采用标准库默认的ServeMux,全局名称为DefaultServeMux。如果请求URI为*并且请求Method为OPTIONS,那么Handle行为会被改成默认的globalOptionsHandler。上述分析的源码为GO 1.18.3。Gin 处理请求的流程前面我们看到只要注册自己的Handle接口到标准库就可以接管请求的处理;那么我们来看一下gin的Handle接口实现。在gin中,handleHTTPRequest就是匹配路径和对应handle 的处理函数。流程大致是这样:获取请求的路径在trees中找到对应的methodTree
로그인 후 복사
  • methodTree中匹配对应路径的处理函数handle
    로그인 후 복사
  • By 다음 메소드는 등록된 함수를 실행합니다
    Next方法执行注册的函数
  • Gin 的 Context 源码

    在执行注册的函数之前我们发现在ServeHTTP方法中使用到了一个sync.Pool,它其实就是对gin.Context的复用。

    진 요청 프로세스 소스 코드 분석

    我们来看一下它的结构:

    // Context is the most important part of gin. It allows us to pass variables between middleware,
    // manage the flow, validate the JSON of a request and render a JSON response for example.
    type Context struct {
     writermem responseWriter
     Request   *http.Request
     Writer    ResponseWriter
    
     Params   Params
     handlers HandlersChain
     index    int8
     fullPath string
    
     engine       *Engine
     params       *Params
     skippedNodes *[]skippedNode
    
     // This mutex protects Keys map.
     mu sync.RWMutex
      ...
    }
    로그인 후 복사

    官方的reqresp都会保存在Context 中。并且gin自己增加了对官方http.ResponseWriter功能的扩展,也就是自己定义了一个接口gin.ResponseWriter

    Gin의 Context 소스 코드

    등록된 함수를 실행하기 전에 ServeHTTP 메서드는 sync.Pool, 실제로는 gin.Context 재사용.

    진 요청 프로세스 소스 코드 분석
    🎜구조를 살펴보겠습니다. : 🎜rrreee🎜공식reqresp컨텍스트. 및gin 공식 http.ResponseWriter 함수 확장, 즉 인터페이스를 직접 정의gin.ResponseWriter🎜🎜몇 가지 다른 방법은 개발을 용이하게 하기 위해 일상적으로 사용하기 위한 캡슐화입니다. 🎜

    Context의 Bind 클래스 메소드 분석

    진 요청 프로세스 소스 코드 분석

    소스 코드에서 이들 모두 지원되는 것을 볼 수 있습니다. 바인딩; 구현은 역직렬화이므로 하나씩 자세히 설명하지 않겠습니다. Binding;其中的实现就是反序列化,具体的就不在一个一个的说了。

    重点是在bind 完成后有一个validate的方法,它其实是采用的github.com/go-playground/validator/v10作为验证数据的库。

    진 요청 프로세스 소스 코드 분석

    并采用懒加载的方式进行初始化,也就是说不用,不会初始化这个对象。

    진 요청 프로세스 소스 코드 분석

    其中验证数据的开发流程,请查看validator[1] 的详细用法。

    ginmode.go文件中有控制一些行为的存在,比如DisableBindValidation

    핵심은 bind 완료 후 validate 메소드, 실제로 github.com/go-playground/validator/v10을 데이터 검증용 라이브러리로 사용합니다. 🎜🎜진 요청 프로세스 소스 코드 분석🎜🎜그리고 지연 로딩을 사용하여 초기화하면 필요가 없습니다. 개체가 초기화되지 않습니다. 🎜🎜진 요청 프로세스 소스 코드 분석🎜🎜데이터 검증 개발 과정은 을 확인해주세요 = "color: #1e6bb8;font-weight:bold;">validator🎜[1]의 자세한 사용법 > . 🎜🎜Inginmode.go 파일에는 DisableBindValidation은 데이터 유효성 검사 기능을 끌 수 있습니다. 이 메서드는 서비스가 시작되기 전에 이 메서드를 호출하여 끌 수 있습니다. 🎜
    진 요청 프로세스 소스 코드 분석

    ginS 폴더

    이 폴더는 기본 내부 전역 gin. 엔진 객체. gin.Engine对象。

    진 요청 프로세스 소스 코드 분석

    并且也是采用懒加载的方式来进行初始化的。

    진 요청 프로세스 소스 코드 분석

    所以对于想使用全局的gin.Engine可以采用这个包,这样你就可以不用保存一个自己的全局gin.Engine

    진 요청 프로세스 소스 코드 분석
또한 지연 로딩을 사용하여 초기화됩니다. 🎜🎜진 요청 프로세스 소스 코드 분석🎜🎜그래서 글로벌 gin.Engine은 이 패키지를 사용할 수 있으므로 전역 gin.Engine 개체. 🎜🎜🎜

위 내용은 진 요청 프로세스 소스 코드 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Go와 Gin을 결합하여 Mysql 데이터를 Excel 테이블로 내보내는 방법 Go와 Gin을 결합하여 Mysql 데이터를 Excel 테이블로 내보내는 방법 May 26, 2023 pm 09:15 PM

1. 목표를 달성하기 위해 Golang은 Excelize를 사용하여 테이블을 브라우저로 내보내어 로컬로 다운로드하거나 저장합니다. 후속 가져오기도 여기에 작성됩니다. 2. 라이브러리는 gogetgithub.com/xuri/excelize/v23, 프로젝트 디렉토리는 go-excel├─app│├─excelize││└─excelize.go│├─model││└ ─ sysUser.go│└─service│└─userService.go├─common│└─mysql.go├─go.mod├─go.sum├─main.go└─setting.json4.

기술 세계를 탐험할 수 있도록 Go 언어 오픈 소스 프로젝트 5개를 선택했습니다. 기술 세계를 탐험할 수 있도록 Go 언어 오픈 소스 프로젝트 5개를 선택했습니다. Jan 30, 2024 am 09:08 AM

오늘날 급속한 기술 발전의 시대에 프로그래밍 언어는 비가 내린 뒤 버섯처럼 솟아오르고 있습니다. 많은 주목을 받고 있는 언어 중 하나가 바로 Go 언어인데, 단순성, 효율성, 동시성 안전성 등 다양한 기능으로 많은 개발자들에게 사랑을 받고 있습니다. Go 언어는 뛰어난 오픈 소스 프로젝트가 많이 포함된 강력한 생태계로 유명합니다. 이 기사에서는 선택된 Go 언어 오픈 소스 프로젝트 5개를 소개하고 독자가 Go 언어 오픈 소스 프로젝트의 세계를 탐색하도록 안내합니다. KubernetesKubernetes는 자동화를 위한 오픈 소스 컨테이너 오케스트레이션 엔진입니다.

Go 언어 개발 필수 사항: 인기 있는 프레임워크 권장 사항 5가지 Go 언어 개발 필수 사항: 인기 있는 프레임워크 권장 사항 5가지 Mar 24, 2024 pm 01:15 PM

"Go 언어 개발 필수 사항: 5가지 인기 프레임워크 권장 사항" 빠르고 효율적인 프로그래밍 언어인 Go 언어는 점점 더 많은 개발자들이 선호하고 있습니다. 개발 효율성을 높이고 코드 구조를 최적화하기 위해 많은 개발자는 프레임워크를 사용하여 애플리케이션을 빠르게 구축하는 방법을 선택합니다. Go 언어의 세계에는 선택할 수 있는 훌륭한 프레임워크가 많이 있습니다. 이 기사에서는 인기 있는 Go 언어 프레임워크 5개를 소개하고 독자가 이러한 프레임워크를 더 잘 이해하고 사용할 수 있도록 구체적인 코드 예제를 제공합니다. 1.GinGin은 빠른 속도를 갖춘 경량 웹 프레임워크입니다.

Gin 프레임워크에서 정적 리소스 파일을 처리하는 방법 Gin 프레임워크에서 정적 리소스 파일을 처리하는 방법 Jun 23, 2023 am 10:54 AM

Gin 프레임워크는 개발자가 간단하고 아름다운 API를 통해 고성능 웹 애플리케이션을 구축할 수 있는 가볍고 빠르며 유연한 웹 프레임워크입니다. 웹 애플리케이션에서 정적 리소스 파일(예: 이미지, CSS, JavaScript, 글꼴 등)은 일반적으로 변경되지 않으므로 애플리케이션 성능을 향상하려면 이러한 리소스 파일을 효율적으로 처리해야 합니다. Gin 프레임워크에서는 정적 리소스 파일을 처리하는 것이 매우 간단합니다. 이 기사에서는 Gin 프레임워크에서 정적 리소스 파일을 처리하는 방법을 소개합니다. 1. G에서

시장에서 가장 인기 있는 golang 프레임워크는 무엇입니까? 시장에서 가장 인기 있는 golang 프레임워크는 무엇입니까? Jun 01, 2024 pm 08:05 PM

현재 가장 인기 있는 Go 프레임워크는 다음과 같습니다. Gin: 가볍고 고성능 웹 프레임워크이며 간단하고 사용하기 쉽습니다. Echo: 고성능 라우팅 및 미들웨어를 제공하는 빠르고 사용자 정의가 가능한 웹 프레임워크입니다. GorillaMux: 고급 라우팅 구성 옵션을 제공하는 빠르고 유연한 멀티플렉서입니다. Fiber: 높은 동시 요청을 처리하는 성능 최적화된 고성능 웹 프레임워크입니다. Martini: 풍부한 기능 세트를 제공하는 객체 지향 디자인을 갖춘 모듈식 웹 프레임워크입니다.

Gin 프레임워크의 API 문서 및 자동화된 테스트에 대한 자세한 설명 Gin 프레임워크의 API 문서 및 자동화된 테스트에 대한 자세한 설명 Jun 22, 2023 pm 09:43 PM

Gin은 Golang으로 작성된 웹 프레임워크로 효율성, 경량성, 유연성, 상대적으로 높은 성능, 사용하기 쉬운 장점을 가지고 있습니다. Gin 프레임워크 개발에서는 API 문서화와 자동화된 테스트가 매우 중요합니다. 이 기사에서는 Gin 프레임워크의 API 문서 및 자동화된 테스트를 심층적으로 살펴보겠습니다. 1. API 문서 API 문서는 다른 개발자가 쉽게 사용하고 이해할 수 있도록 모든 API 인터페이스의 세부 정보를 기록하는 데 사용됩니다. Gin 프레임워크는 Swagger, GoSwa를 포함한 다양한 API 문서 도구를 제공합니다.

Go 언어 프레임워크 살펴보기: 놓칠 수 없는 5가지 선택! Go 언어 프레임워크 살펴보기: 놓칠 수 없는 5가지 선택! Feb 19, 2024 pm 02:29 PM

빠르고 효율적인 프로그래밍 언어인 Go 언어는 항상 프로그래머들이 선호해 왔습니다. Go 언어 생태계에서 프레임워크는 개발자가 애플리케이션을 더 빠르게 구축하는 데 중요한 역할을 합니다. 이 글에서는 다섯 가지 Go 언어 프레임워크를 소개하여 해당 프레임워크의 특징과 사용법을 이해할 수 있도록 하겠습니다. 1. Gin 프레임워크 Gin 프레임워크는 빠르고 고성능 특성을 갖춘 경량 웹 프레임워크입니다. Gin 프레임워크를 사용하여 RESTful API 및 웹 애플리케이션을 빠르게 구축하세요. 다음은 간단한 예제 코드입니다:

진 요청 프로세스 소스 코드 분석 진 요청 프로세스 소스 코드 분석 Aug 04, 2023 pm 05:26 PM

공식 req 및 resp는 Context에 저장됩니다. 그리고 gin 자체는 공식 http.ResponseWriter 함수에 확장을 추가했습니다. 즉, gin.ResponseWriter 인터페이스를 정의했습니다.

See all articles