Jadual Kandungan
Gin 的 Context 源码" >Gin 的 Context 源码
Kod sumber Konteks Gin" >Kod sumber Konteks Gin
Rumah pembangunan bahagian belakang Golang Analisis kod sumber proses permintaan gin

Analisis kod sumber proses permintaan gin

Aug 04, 2023 pm 05:26 PM
gin

http perkhidmatan perpustakaan standard

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
Salin selepas log masuk
  • methodTree中匹配对应路径的处理函数handle
    Salin selepas log masuk
  • Dengan Seterusnya Kaedah melaksanakan fungsi berdaftar
    Next方法执行注册的函数
  • Gin 的 Context 源码

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

    Analisis kod sumber proses permintaan gin

    我们来看一下它的结构:

    // 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
      ...
    }
    Salin selepas log masuk

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

    Kod sumber Konteks Gin

    Sebelum melaksanakan fungsi berdaftar, kami mendapati bahawa dalam ServeHTTP kaedah menggunakan sync.Pool, yang sebenarnya gin.Context guna semula.

    Analisis kod sumber proses permintaan gin
    🎜Mari kita lihat strukturnya : 🎜rrreee🎜Officialreq dan resp akan disimpan dalam Konteks. dangin menambah sokongan untuk http.ResponseWriter sambungan fungsi, iaitu, mentakrifkan antara muka sendirigin.ResponseWriter🎜🎜Sesetengah kaedah lain ialah enkapsulasi untuk kegunaan harian untuk memudahkan pembangunan. 🎜

    Analisis kaedah kelas Context's Bind

    Analisis kod sumber proses permintaan gin

    Anda boleh lihat dalam kod sumber bahawa sejumlah daripada ini disokong Mengikat; Pelaksanaannya ialah penyahserialisasian, dan saya tidak akan memperincikan satu persatu. Binding;其中的实现就是反序列化,具体的就不在一个一个的说了。

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

    Analisis kod sumber proses permintaan gin

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

    Analisis kod sumber proses permintaan gin

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

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

    Intinya ialah bind Selepas selesai terdapat valid kaedah, yang sebenarnya menggunakan github.com/go-playground/validator/v10 sebagai perpustakaan untuk mengesahkan data. 🎜🎜Analisis kod sumber proses permintaan gin🎜🎜Dan gunakan pemuatan malas, ini bermakna tidak perlu membuat permulaan. objek tidak akan dimulakan. 🎜🎜Analisis kod sumber proses permintaan gin🎜🎜Untuk proses pembangunan data, sila semak validator🎜[1] . 🎜🎜Dalamgin'smode.go mempunyai kawalan untuk beberapa gelagat, seperti DisableBindValidation boleh mematikan fungsi pengesahan data. Kaedah ini boleh dimatikan dengan memanggil kaedah ini sebelum perkhidmatan dimulakan. 🎜
    Analisis kod sumber proses permintaan gin

    folder ginS

    Folder ini mentakrifkan dalaman lalai global gin. Enjin objek. gin.Engine对象。

    Analisis kod sumber proses permintaan gin

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

    Analisis kod sumber proses permintaan gin

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

    Analisis kod sumber proses permintaan gin
Dan ia juga dimulakan menggunakan lazy load. 🎜🎜Analisis kod sumber proses permintaan gin🎜🎜Jadi bagi mereka yang ingin menggunakan global gin.Engine boleh menggunakan pakej ini, jadi anda tidak perlu menyimpan gin.Enjin objek. 🎜🎜🎜

Atas ialah kandungan terperinci Analisis kod sumber proses permintaan gin. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menggabungkan Go dengan Gin untuk mengeksport data Mysql ke jadual Excel Bagaimana untuk menggabungkan Go dengan Gin untuk mengeksport data Mysql ke jadual Excel May 26, 2023 pm 09:15 PM

1. Untuk mencapai matlamat, Golang menggunakan excelize untuk mengeksport jadual ke penyemak imbas untuk memuat turun atau menyimpannya secara tempatan. Import seterusnya juga akan ditulis di sini 2. Perpustakaan menggunakan gogetgithub.com/xuri/excelize/v23, direktori projek go-excel├─app│├─excelize││└─excelize.go│├─model││ ─ sysUser.go│└─service│└─userService.go├─common│└─mysql.go├─go.mod├─go.sum├─main.go└─penulisan kod utama.json4

Lima projek sumber terbuka bahasa Go yang dipilih untuk membawa anda meneroka dunia teknologi Lima projek sumber terbuka bahasa Go yang dipilih untuk membawa anda meneroka dunia teknologi Jan 30, 2024 am 09:08 AM

Dalam era perkembangan teknologi yang pesat hari ini, bahasa pengaturcaraan bermunculan seperti cendawan selepas hujan. Salah satu bahasa yang telah menarik perhatian ramai ialah bahasa Go, yang digemari oleh ramai pembangun kerana kesederhanaan, kecekapan, keselamatan serentak dan ciri-ciri lain. Bahasa Go terkenal dengan ekosistemnya yang kukuh dengan banyak projek sumber terbuka yang sangat baik. Artikel ini akan memperkenalkan lima projek sumber terbuka bahasa Go yang dipilih dan membawa pembaca untuk meneroka dunia projek sumber terbuka bahasa Go. KubernetesKubernetes ialah enjin orkestrasi kontena sumber terbuka untuk automatik

Keperluan pembangunan bahasa Go: 5 cadangan rangka kerja yang popular Keperluan pembangunan bahasa Go: 5 cadangan rangka kerja yang popular Mar 24, 2024 pm 01:15 PM

"Go Language Development Essentials: 5 Syor Rangka Kerja Popular" Sebagai bahasa pengaturcaraan yang pantas dan cekap, bahasa Go digemari oleh semakin ramai pembangun. Untuk meningkatkan kecekapan pembangunan dan mengoptimumkan struktur kod, ramai pembangun memilih untuk menggunakan rangka kerja untuk membina aplikasi dengan cepat. Dalam dunia bahasa Go, terdapat banyak rangka kerja yang sangat baik untuk dipilih. Artikel ini akan memperkenalkan 5 rangka kerja bahasa Go yang popular dan menyediakan contoh kod khusus untuk membantu pembaca memahami dan menggunakan rangka kerja ini dengan lebih baik. 1.GinGin ialah rangka kerja web yang ringan dengan pantas

Cara mengendalikan fail sumber statik dalam rangka kerja Gin Cara mengendalikan fail sumber statik dalam rangka kerja Gin Jun 23, 2023 am 10:54 AM

Rangka kerja Gin ialah rangka kerja web yang ringan, pantas dan fleksibel yang membolehkan pembangun membina aplikasi web berprestasi tinggi melalui API yang ringkas dan cantik. Dalam aplikasi web, fail sumber statik (seperti imej, CSS, JavaScript, fon, dll.) biasanya tidak berubah, jadi fail sumber ini perlu diproses dengan cekap untuk meningkatkan prestasi aplikasi. Dalam rangka kerja Gin, memproses fail sumber statik adalah sangat mudah. Artikel ini akan memperkenalkan cara mengendalikan fail sumber statik dalam rangka kerja Gin. 1. Dalam G

Terokai rangka kerja bahasa Go: 5 pilihan yang tidak boleh dilepaskan! Terokai rangka kerja bahasa Go: 5 pilihan yang tidak boleh dilepaskan! Feb 19, 2024 pm 02:29 PM

Sebagai bahasa pengaturcaraan yang pantas dan cekap, bahasa Go sentiasa digemari oleh pengaturcara. Dalam ekosistem bahasa Go, rangka kerja memainkan peranan penting dalam membantu pembangun membina aplikasi dengan lebih pantas. Artikel ini akan memperkenalkan lima rangka kerja bahasa Go untuk membolehkan anda memahami ciri dan penggunaannya. 1. Rangka kerja Gin Rangka kerja Gin ialah rangka kerja Web yang ringan dengan ciri prestasi yang pantas dan tinggi. Gunakan rangka kerja Gin untuk membina API RESTful dan aplikasi web dengan cepat. Berikut ialah contoh kod mudah:

Penjelasan terperinci tentang dokumentasi API dan ujian automatik dalam rangka kerja Gin Penjelasan terperinci tentang dokumentasi API dan ujian automatik dalam rangka kerja Gin Jun 22, 2023 pm 09:43 PM

Gin ialah rangka kerja web yang ditulis dalam Golang Ia mempunyai kelebihan kecekapan, ringan, fleksibiliti, prestasi yang agak tinggi dan mudah digunakan. Dalam pembangunan rangka kerja Gin, dokumentasi API dan ujian automatik adalah sangat penting. Artikel ini akan melihat secara mendalam dokumentasi API dan ujian automatik dalam rangka kerja Gin. 1. Dokumentasi API Dokumentasi API digunakan untuk merekod maklumat terperinci semua antara muka API untuk memudahkan penggunaan dan pemahaman pembangun lain. Rangka kerja Gin menyediakan pelbagai alat dokumentasi API, termasuk Swagger, GoSwa

Apakah rangka kerja golang yang paling popular di pasaran? Apakah rangka kerja golang yang paling popular di pasaran? Jun 01, 2024 pm 08:05 PM

Rangka kerja Go yang paling popular pada masa ini termasuk: Gin: rangka kerja web yang ringan dan berprestasi tinggi yang ringkas dan mudah digunakan. Echo: Rangka kerja web yang pantas dan boleh disesuaikan yang menyediakan penghalaan dan perisian tengah berprestasi tinggi. GorillaMux: Pemultipleks pantas dan fleksibel yang menyediakan pilihan konfigurasi penghalaan lanjutan. Fiber: Rangka kerja web berprestasi tinggi yang dioptimumkan prestasi yang mengendalikan permintaan serentak yang tinggi. Martini: Rangka kerja web modular dengan reka bentuk berorientasikan objek yang menyediakan set ciri yang kaya.

Analisis kod sumber proses permintaan gin Analisis kod sumber proses permintaan gin Aug 04, 2023 pm 05:26 PM

Req dan resp rasmi akan disimpan dalam Konteks. Dan gin sendiri telah menambah sambungan kepada fungsi http.ResponseWriter rasmi, iaitu, ia telah mentakrifkan gin antara muka.ResponseWriter.

See all articles