Rumah pembangunan bahagian belakang Golang golang menerima permintaan http

golang menerima permintaan http

May 15, 2023 am 11:17 AM

Golang ialah bahasa pengaturcaraan yang cekap dan ringkas dengan pelbagai aplikasi. Dari segi pembangunan Web, kecekapan tinggi Golang, konkurensi dan ciri-ciri lain memberikannya keupayaan berkuasa, jadi Golang telah menjadi salah satu teknologi popular untuk pembangunan Web. Artikel ini akan menganalisis cara menggunakan Golang untuk menerima permintaan HTTP.

1. Permintaan dan respons HTTP

Sebelum memahami penerimaan permintaan HTTP oleh Golang, mari kita fahami konsep asas permintaan dan respons HTTP.

Permintaan HTTP merujuk kepada operasi permintaan yang dihantar oleh klien ke pelayan, yang dibahagikan kepada bahagian berikut:

  • Barisan permintaan: termasuk kaedah HTTP, URL dan versi HTTP
  • Tajuk permintaan: Maklumat tambahan diminta, seperti maklumat pelanggan, maklumat pengesahan, dsb.
  • Isi permintaan: data yang dibawa oleh permintaan.

Respons HTTP merujuk kepada respons pelayan terhadap permintaan HTTP yang dikeluarkan oleh klien, yang dibahagikan kepada bahagian berikut:

  • Barisan respons: mengandungi versi HTTP, Status kod dan huraian status.
  • Pengepala respons: maklumat tambahan bagi respons, seperti maklumat pelayan, masa tamat tempoh, dsb.
  • Badan respons: kandungan respons.

2. Gunakan Golang untuk mengendalikan permintaan HTTP

Di Golang, kami boleh menggunakan pustaka net/http dengan mudah untuk mengendalikan permintaan HTTP. Pustaka ini menyediakan penghala HTTP lalai yang menghalakan permintaan secara dinamik berdasarkan URL yang diminta.

Berikut ialah contoh mudah yang menunjukkan cara menggunakan Golang untuk menerima permintaan HTTP:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", hello)
    http.ListenAndServe(":8080", nil)
}

func hello(w http.ResponseWriter, r *http.Request) {
    fmt.Println("Hello world")
    fmt.Fprintf(w, "Hello, %s!", r.URL.Path[1:])
}
Salin selepas log masuk

Contoh ini menunjukkan cara menggunakan fungsi http.HandleFunc dalam Golang untuk mengendalikan permintaan HTTP. Fungsi ini menerima dua parameter:

  • Laluan URL yang diminta
  • Kaedah untuk mengendalikan permintaan (iaitu, fungsi panggil balik permintaan)

Dalam contoh ini, kami membenarkan semua permintaan diproses dengan memanggil fungsi hello. Fungsi ini akan mengeluarkan "Hello world" dan mengembalikan respons dengan kandungan "Hello, {path}!", dengan {path} ialah laluan yang diminta.

Kami menggunakan fungsi http.ListenAndServe untuk memulakan pelayan HTTP dan mendengar pada port 8080. Parameter kedua diluluskan penghala pelayan Apa yang kami luluskan di sini adalah nil, yang bermaksud penghala lalai digunakan.

3. Langkah khusus untuk memproses permintaan HTTP

Contoh di atas menunjukkan cara menggunakan Golang untuk menerima dan memproses permintaan HTTP. Sekarang, mari kita terangkan langkah pemprosesan khusus secara terperinci.

  1. Buat Penghala

Kita boleh menggunakan fungsi http.NewServeMux untuk mencipta penghala baharu. Fungsi ini mengembalikan objek jenis ServeMux baharu yang melaksanakan antara muka http.Handler, yang boleh kami gunakan untuk mengendalikan permintaan HTTP.

mux := http.NewServeMux()
Salin selepas log masuk
  1. Daftar fungsi pengendali

Anda boleh menggunakan fungsi http.HandleFunc untuk mendaftarkan fungsi pengendali. Parameter pertama fungsi ini ialah laluan permintaan, dan parameter kedua ialah fungsi yang mengendalikan permintaan.

mux.HandleFunc("/", handleRequest)
Salin selepas log masuk
  1. Mulakan pelayan HTTP

Gunakan fungsi http.ListenAndServe untuk memulakan pelayan HTTP. Parameter pertama ialah alamat pelayan dan parameter kedua ialah penghala.

http.ListenAndServe(":8080", mux)
Salin selepas log masuk
  1. Memproses permintaan

Apabila menerima permintaan HTTP, penghala akan secara automatik memilih fungsi pemprosesan yang sepadan berdasarkan laluan permintaan, dan kemudian menghantar permintaan kepadanya. Fungsi pemprosesan perlu menerima dua parameter:

  • http.ResponseWriter: antara muka untuk menulis respons HTTP
  • *http.Request: mengandungi semua maklumat permintaan
func handleRequest(w http.ResponseWriter, r *http.Request) {
    // 处理请求
}
Salin selepas log masuk

Dalam fungsi pengendali, kita boleh membaca data yang diminta, menjana respons, dsb.

4. Kaedah HTTP yang biasa digunakan

Kaedah permintaan HTTP merujuk kepada operasi yang dilakukan pada sumber. Kaedah HTTP yang biasa digunakan termasuk:

  • DAPAT: Dapatkan sumber
  • POS: Cipta sumber baharu
  • PUT: Kemas kini atau cipta sumber
  • PADAM: Padamkan Sumber

Di Golang, kita boleh menggunakan http.Method pemalar untuk mewakili kaedah HTTP yang berbeza.

r.Method == http.MethodGet
r.Method == http.MethodPost
r.Method == http.MethodPut
r.Method == http.MethodDelete
Salin selepas log masuk

5. Dapatkan parameter permintaan

Semasa proses memproses permintaan HTTP, kami mungkin perlu mendapatkan parameter dalam permintaan. Ini termasuk parameter pertanyaan URL, data borang dalam permintaan POST dan banyak lagi. Di Golang, kami boleh mendapatkan parameter permintaan dengan cara berikut:

  • Parameter pertanyaan URL: Gunakan fungsi r.URL.Query() untuk mendapatkan kamus parameter pertanyaan URL.
  • Data borang dalam permintaan POST: Gunakan fungsi r.PostFormValue() untuk mendapatkan data borang dalam permintaan POST.
  • Pengepala permintaan: Gunakan r.Header untuk mendapatkan pengepala permintaan.

Berikut ialah contoh mendapatkan parameter permintaan:

func handleRequest(w http.ResponseWriter, r *http.Request) {
    // 获取URL查询参数
    queryParams := r.URL.Query()
    name := queryParams.Get("name")
    fmt.Println("Name: ", name)

    // 获取POST表单参数
    err := r.ParseForm()
    if err != nil {
        http.Error(w, "Bad Request", http.StatusBadRequest)
        return
    }
    username := r.PostFormValue("username")
    password := r.PostFormValue("password")
    fmt.Println("Username: ", username)
    fmt.Println("Password: ", password)

    // 获取请求头
    userAgent := r.Header.Get("User-Agent")
    fmt.Println("User-Agent: ", userAgent)
}
Salin selepas log masuk

Contoh ini menunjukkan cara mendapatkan parameter pertanyaan URL, parameter borang POST dan pengepala permintaan. Kami menggunakan r.URL.Query() untuk mendapatkan kamus parameter pertanyaan URL, r.PostFormValue() untuk mendapatkan parameter borang POST dan r.Header.Get() untuk mendapatkan pengepala permintaan.

6. Memproses respons HTTP

Semasa proses memproses permintaan HTTP, kami juga perlu mengembalikan respons kepada klien. Di Golang, kita boleh menggunakan antara muka http.ResponseWriter untuk menulis respons HTTP. Antara muka ini menyediakan kaedah berikut:

  • Write:将字节数组写入响应体
  • WriteString:将字符串写入响应体
  • Header:获取响应头,可以通过它来设置响应头
  • WriteHeader:设置响应状态码

下面是一个返回HTTP响应的例子:

func handleRequest(w http.ResponseWriter, r *http.Request) {
    // 写入响应体
    w.Write([]byte("Hello world"))

    // 设置响应头
    w.Header().Set("Content-Type", "text/plain")

    // 设置响应状态码
    w.WriteHeader(http.StatusOK)
}
Salin selepas log masuk

这个例子展示了如何返回HTTP响应。我们使用w.Write函数将字节数组写入响应体,使用w.Header.Set函数设置响应头,使用w.WriteHeader函数设置响应状态码。

七、中间件

中间件是一种常见的 Web 开发模式。在处理 HTTP 请求的过程中,我们可以使用中间件来增强 HTTP 处理功能和业务逻辑。例如,Golang 中的 gin 框架就是一个很好的中间件实现。

在 Golang 中,我们可以轻松地定义自己的中间件。中间件函数可以接收一个 http.HandlerFunc 类型的参数,并返回一个 http.HandlerFunc 类型的函数。在中间件函数中,我们可以对请求进行一些检查或者增加一些业务逻辑,例如鉴权、日志记录等等。

下面是一个简单的中间件例子:

func middleware(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        // 鉴权逻辑...
        if isAuthenticate(r) {
            next(w, r)
        } else {
            http.Error(w, "Unauthorized", http.StatusUnauthorized)
        }
    }
}
Salin selepas log masuk

在这个例子中,我们定义了一个名为 middleware 的中间件函数。它的参数是一个 http.HandlerFunc 类型的函数。在中间件函数中,我们可以进行鉴权等逻辑,然后决定是否调用 next 函数,继续处理请求。

在我们的应用中,我们可以使用上述定义的中间件函数,并将处理函数传递给它。

func hanldeRequest(w http.ResponseWriter, r *http.Request) {
    // 处理代码...
}

http.HandleFunc("/", middleware(handleRequest))
Salin selepas log masuk

在这个例子中,我们使用 http.HandleFunc 函数来将处理函数和路由路径绑定在一起。然后,我们将它作为参数传递给 middleware 函数,再将返回的 http.HandlerFunc 类型的函数作为参数传递给 http.HandleFunc 函数。

总结

在本文中,我们介绍了如何使用 Golang 来接收 HTTP 请求。我们了解了 HTTP 请求和响应的基本概念,在实践中使用 net/http 库来处理 HTTP 请求,并详细介绍了具体的处理步骤和常用的 HTTP 方法。同时,我们还探讨了中间件的概念和实现方式。

如果你对 Golang 的 Web 开发有兴趣,这些内容对你来说应该是非常有帮助的。最后,我希望本文可以让你更好地理解 Golang 接受 HTTP 请求的知识。

Atas ialah kandungan terperinci golang menerima permintaan http. 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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu 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)

Topik panas

Tutorial Java
1667
14
Tutorial PHP
1273
29
Tutorial C#
1255
24
Golang vs Python: Prestasi dan Skala Golang vs Python: Prestasi dan Skala Apr 19, 2025 am 12:18 AM

Golang lebih baik daripada Python dari segi prestasi dan skalabiliti. 1) Ciri-ciri jenis kompilasi Golang dan model konkurensi yang cekap menjadikannya berfungsi dengan baik dalam senario konvensional yang tinggi. 2) Python, sebagai bahasa yang ditafsirkan, melaksanakan perlahan -lahan, tetapi dapat mengoptimumkan prestasi melalui alat seperti Cython.

Golang dan C: Konvensyen vs kelajuan mentah Golang dan C: Konvensyen vs kelajuan mentah Apr 21, 2025 am 12:16 AM

Golang lebih baik daripada C dalam kesesuaian, manakala C lebih baik daripada Golang dalam kelajuan mentah. 1) Golang mencapai kesesuaian yang cekap melalui goroutine dan saluran, yang sesuai untuk mengendalikan sejumlah besar tugas serentak. 2) C Melalui pengoptimuman pengkompil dan perpustakaan standard, ia menyediakan prestasi tinggi yang dekat dengan perkakasan, sesuai untuk aplikasi yang memerlukan pengoptimuman yang melampau.

Bermula dengan Go: Panduan Pemula Bermula dengan Go: Panduan Pemula Apr 26, 2025 am 12:21 AM

GoisidealforbeginnersandSuekableforcloudandnetworkservicesduetoitssimplicity, kecekapan, danconcurrencyfeatures.1) installgofromtheofficialwebsiteandverifywith'goversion'.2)

Golang vs C: Perbandingan Prestasi dan Kelajuan Golang vs C: Perbandingan Prestasi dan Kelajuan Apr 21, 2025 am 12:13 AM

Golang sesuai untuk pembangunan pesat dan senario serentak, dan C sesuai untuk senario di mana prestasi ekstrem dan kawalan peringkat rendah diperlukan. 1) Golang meningkatkan prestasi melalui pengumpulan sampah dan mekanisme konvensional, dan sesuai untuk pembangunan perkhidmatan web yang tinggi. 2) C mencapai prestasi muktamad melalui pengurusan memori manual dan pengoptimuman pengkompil, dan sesuai untuk pembangunan sistem tertanam.

Impak Golang: Kelajuan, Kecekapan, dan Kesederhanaan Impak Golang: Kelajuan, Kecekapan, dan Kesederhanaan Apr 14, 2025 am 12:11 AM

Goimpactsdevelopmentpositivielythroughspeed, efficiency, andsimplicity.1) Speed: goCompilesquicklyandrunsefficiently, idealforlargeproject.2) Kecekapan: ITSComprehensivestandardlibraryraryrarexternaldependencies, enhingdevelyficiency.

C dan Golang: Apabila prestasi sangat penting C dan Golang: Apabila prestasi sangat penting Apr 13, 2025 am 12:11 AM

C lebih sesuai untuk senario di mana kawalan langsung sumber perkakasan dan pengoptimuman prestasi tinggi diperlukan, sementara Golang lebih sesuai untuk senario di mana pembangunan pesat dan pemprosesan konkurensi tinggi diperlukan. Kelebihan 1.C terletak pada ciri-ciri perkakasan dan keupayaan pengoptimuman yang tinggi, yang sesuai untuk keperluan berprestasi tinggi seperti pembangunan permainan. 2. Kelebihan Golang terletak pada sintaks ringkas dan sokongan konvensional semulajadi, yang sesuai untuk pembangunan perkhidmatan konvensional yang tinggi.

Golang vs Python: Perbezaan dan Persamaan Utama Golang vs Python: Perbezaan dan Persamaan Utama Apr 17, 2025 am 12:15 AM

Golang dan Python masing -masing mempunyai kelebihan mereka sendiri: Golang sesuai untuk prestasi tinggi dan pengaturcaraan serentak, sementara Python sesuai untuk sains data dan pembangunan web. Golang terkenal dengan model keserasiannya dan prestasi yang cekap, sementara Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya.

Golang dan C: Perdagangan dalam prestasi Golang dan C: Perdagangan dalam prestasi Apr 17, 2025 am 12:18 AM

Perbezaan prestasi antara Golang dan C terutamanya ditunjukkan dalam pengurusan ingatan, pengoptimuman kompilasi dan kecekapan runtime. 1) Mekanisme pengumpulan sampah Golang adalah mudah tetapi boleh menjejaskan prestasi, 2) Pengurusan memori manual C dan pengoptimuman pengkompil lebih cekap dalam pengkomputeran rekursif.

See all articles