Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Contoh untuk menerangkan cara menggunakan Golang untuk melaksanakan penghalaan

Contoh untuk menerangkan cara menggunakan Golang untuk melaksanakan penghalaan

PHPz
PHPzasal
2023-04-11 09:17:251555semak imbas

Golang ialah bahasa pengaturcaraan yang cekap, ringkas dan berprestasi tinggi. Ciri utamanya ialah keunggulannya berbanding bahasa lain dari segi kelajuan pelaksanaan kod. Penghalaan di Golang ialah bahagian penting dalam pembangunan web dan memerlukan penghalaan untuk memetakan permintaan kepada pengendali yang betul. Artikel ini akan memperkenalkan cara menggunakan Golang untuk melaksanakan penghalaan.

1. Cipta pelayan HTTP asas
Pertama, kita perlu mencipta pelayan HTTP asas pada komputer tempatan.

package main

import (
    "fmt"
    "log"
    "net/http"
)

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

func hello(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World!")
}

Kod di atas memulakan pelayan HTTP menggunakan pakej http terbina dalam Go. Gunakan fungsi http.HandleFunc untuk menentukan pemproses yang anda mahu hantar permintaan dan gunakan fungsi http.ListenAndServe untuk memulakan pelayan pada port 8080.

2. Tambah penghalaan
Kod di atas hanya boleh mengendalikan laluan akar. Sekarang kita akan menambah pengendali lain untuk mengendalikan laluan lain.

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", home)
    http.HandleFunc("/about", about)

    log.Fatal(http.ListenAndServe(":8080", nil))
}

func home(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Home Page")
}

func about(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "About Page")
}

Dalam kod di atas, kami menggunakan fungsi http.HandleFunc untuk mentakrifkan dua fungsi pengendali: home dan about. Kami juga memetakannya ke laluan / dan /about.

3. Gunakan perpustakaan pihak ketiga untuk melaksanakan penghalaan

Di Golang, terdapat juga beberapa perpustakaan pihak ketiga yang boleh membantu kami melaksanakan penghalaan. Salah satu yang paling popular ialah perpustakaan mux.

Untuk menggunakan mux untuk melaksanakan penghalaan, kami perlu mengubah suai kod di atas seperti berikut:

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/mux"
)

func main() {
    router := mux.NewRouter()
    router.HandleFunc("/", home)
    router.HandleFunc("/about", about)

    log.Fatal(http.ListenAndServe(":8080", router))
}

func home(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Home Page")
}

func about(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "About Page")
}

Dalam kod di atas, kami menggunakan perpustakaan gorilla/mux untuk mengendalikan penghalaan. Kami mula-mula membuat contoh mux.Router. Kami kemudian mentakrifkan dua fungsi pengendali dan mengikatnya ke laluan yang sama seperti di atas.

4. Tambahkan penghalaan dinamik

Kami juga boleh menetapkan laluan sebagai laluan dinamik untuk mengendalikan permintaan yang serupa dengan /user/10. Dalam kes ini, 10 ialah bahagian dinamik dan boleh ditukar mengikut keperluan.

Kita boleh menggunakan fungsi mux.Vars() untuk mengekstrak nilai seperti 10 dan menghantarnya semula kepada pelanggan menggunakan fungsi http.ResponseWriter.

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/mux"
)

func main() {
    router := mux.NewRouter()

    router.HandleFunc("/", home)
    router.HandleFunc("/about", about)

    // 添加动态路由
    router.HandleFunc("/user/{id}", func(w http.ResponseWriter, r *http.Request) {
        vars := mux.Vars(r)
        id := vars["id"]
        fmt.Fprintf(w, "User ID: %v", id)
    })

    log.Fatal(http.ListenAndServe(":8080", router))
}

func home(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Home Page")
}

func about(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "About Page")
}

Kod di atas memetakan laluan /user/{id} ke fungsi tanpa nama yang mengekstrak nilai "id" dan menghantarnya kembali kepada pelanggan.

5 Pengumpulan laluan

Akhir sekali, kita boleh mengelompokkan laluan. Ini menjadikan kod lebih mudah diurus, terutamanya dalam aplikasi dengan banyak laluan.

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/mux"
)

func main() {
    router := mux.NewRouter()

    // 创建子路由器
    api := router.PathPrefix("/api").Subrouter()
    api.HandleFunc("/", apiHome)
    api.HandleFunc("/user", apiUser)

    // 添加其他路由
    router.HandleFunc("/", home)
    router.HandleFunc("/about", about)

    log.Fatal(http.ListenAndServe(":8080", router))
}

func home(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Home Page")
}

func about(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "About Page")
}

func apiHome(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "API Home Page")
}

func apiUser(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "API User Page")
}

Kod di atas menunjukkan cara menggunakan Subrouter() untuk mencipta sub-router dan memetakannya ke laluan /api. Selain itu, kami menambah fungsi penghalaan dan pengendali asas yang lain.

6. Ringkasan

Dalam artikel ini, kami memperkenalkan kaedah pelaksanaan penghalaan dalam Go. Kami mulakan dengan mencipta pelayan HTTP asas dan kemudian mengoptimumkan kod menggunakan perpustakaan gorilla/mux. Kami juga menunjukkan cara menggunakan penghalaan dinamik, cara mengumpulkan laluan dan cara menambah pengendali pada laluan.

Fungsi penghalaan Golang berkuasa dan sangat mudah digunakan. Ia membantu pembangun membina aplikasi web yang cekap dan berprestasi tinggi sambil mengurangkan masa pembangunan dan kerumitan kod.

Atas ialah kandungan terperinci Contoh untuk menerangkan cara menggunakan Golang untuk melaksanakan penghalaan. 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