Rumah >pembangunan bahagian belakang >Golang >Golang melaksanakan perkhidmatan perkhidmatan web

Golang melaksanakan perkhidmatan perkhidmatan web

王林
王林asal
2023-05-14 22:41:061645semak imbas

Dengan populariti seni bina perkhidmatan mikro dan permintaan yang semakin meningkat untuk perkhidmatan Web, semakin ramai pembangun mula menggunakan Golang untuk melaksanakan perkhidmatan Web. Golang ialah bahasa ringan dengan kelajuan penyusunan pantas dan prestasi cemerlang, menjadikannya pilihan ideal untuk melaksanakan perkhidmatan web.

Dalam artikel ini, kita akan membincangkan cara menggunakan Golang untuk melaksanakan perkhidmatan web, termasuk memproses permintaan HTTP, memproses data JSON dan menggunakan pakej "net/http" terbina dalam Golang untuk melaksanakan pelayan web.

1. Sediakan persekitaran

Sebelum anda bermula, anda perlu memastikan bahawa anda telah memasang Golang dengan betul dan mengkonfigurasikan pembolehubah persekitaran yang sepadan. Jika anda seorang pemula, sila muat turun dan pasang Golang (https://golang.org/dl/) di tapak web rasmi terlebih dahulu, dan pastikan direktori di mana ia berada telah ditambahkan pada pembolehubah persekitaran PATH.

Kami perlu menggunakan perpustakaan pihak ketiga - "gorilla/mux" untuk mengendalikan permintaan HTTP. Pustaka ini boleh membantu kami menyelesaikan beberapa masalah penghalaan yang rumit.

boleh dipasang menggunakan arahan berikut:

go get -u github.com/gorilla/mux

2. Laksanakan Perkhidmatan Web

Di bawah ini kami akan menggunakan Golang dan gorila/mux untuk melaksanakan perkhidmatan Web mudah, yang akan Menyediakan fungsi berikut:

  • memproses permintaan GET dan mengembalikan halaman HTML;
  • Pertama, kita perlu memulakan pelayan HTTP. Di Golang, anda boleh menggunakan pakej "net/http" untuk melaksanakan pelayan HTTP. Pakej ini menyediakan struktur yang dipanggil "Pelayan", yang mempunyai dua ahli penting - Pengendali dan Addr.
  • Pengendali digunakan untuk mengendalikan permintaan HTTP Kami boleh menyesuaikan Pengendali dan mengikatnya pada pelayan. Di sini kita akan menggunakan gorila/mux untuk menentukan pengendali laluan dan mengikatnya ke pelayan HTTP.
package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
    "github.com/gorilla/mux"
)

func main() {
    // 定义路由处理程序
    r := mux.NewRouter()

    // 定义处理GET请求的路由
    r.HandleFunc("/", homePage).Methods("GET")
    r.HandleFunc("/users", getAllUsers).Methods("GET")
    r.HandleFunc("/user/{id}", getUserByID).Methods("GET")

    // 定义处理POST请求的路由
    r.HandleFunc("/user", createUser).Methods("POST")

    // 绑定路由处理程序到HTTP服务器
    log.Fatal(http.ListenAndServe(":8080", r))
}

Melalui kod di atas, kami telah menentukan empat pengendali penghalaan, yang merangkumi tiga kaedah GET dan satu kaedah POST, masing-masing sepadan dengan pemerolehan data dan penambahan data.

Seterusnya, kita perlu melaksanakan kaedah ini.

Kendalikan permintaan GET dan kembalikan halaman HTML

func homePage(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Welcome to the HomePage!")
    fmt.Println("Endpoint Hit: homePage")
}
    Ini adalah kaedah yang sangat mudah, ia hanya memaparkan rentetan pada penyemak imbas.
Kendalikan permintaan GET, kembalikan data JSON

    Dalam contoh ini, kami mencipta rentetan JSON berkod keras yang mengandungi butiran pengguna dan menghantarnya dalam respons HTTP Kembalikan rentetan JSON ini .
  1. type User struct {
        ID        string `json:"id"`
        FirstName string `json:"firstname"`
        LastName  string `json:"lastname"`
        Email     string `json:"email"`
        Phone     string `json:"phone"`
    }
    
    var users []User
    
    func getAllUsers(w http.ResponseWriter, r *http.Request) {
        users := []User{
            User{ID: "1", FirstName: "Mike", LastName: "Smith", Email: "mike@example.com", Phone: "1234567890"},
            User{ID: "2", FirstName: "John", LastName: "Doe", Email: "john@example.com", Phone: "0987654321"},
        }
        json.NewEncoder(w).Encode(users)
    }
  2. Kaedah ini akan menulis data JSON ke dalam Badan respons HTTP dan secara automatik menetapkan Content-Type kepada application/json.

Proses permintaan GET dan dapatkan maklumat pengguna berdasarkan ID

    Apabila pengguna menghantar permintaan GET, kami perlu mencari maklumat pengguna dalam pangkalan data dengan ID dan kembalikan maklumat tersebut.
  1. func getUserByID(w http.ResponseWriter, r *http.Request) {
        vars := mux.Vars(r)
        id := vars["id"]
        for _, user := range users {
            if user.ID == id {
                json.NewEncoder(w).Encode(user)
                return
            }
        }
        json.NewEncoder(w).Encode(&User{})
    }
  2. Dalam kaedah ini, kami mula-mula mendapatkan ID daripada permintaan menggunakan fungsi mux.Vars. Kami kemudian melelang melalui senarai pengguna, mencari pengguna yang sepadan dengan ID dan menulisnya ke dalam Badan respons HTTP. Jika tiada pengguna yang sepadan ditemui, kami akan mengembalikan pengguna kosong.

Kendalikan permintaan POST, terima data JSON

    Akhir sekali, kami perlu melaksanakan kaedah yang akan menerima permintaan POST dan menghuraikan data JSON daripada Badan permintaan, dan kemudian Pengguna ditambah ke senarai pengguna.
  1. func createUser(w http.ResponseWriter, r *http.Request) {
        var user User
        _ = json.NewDecoder(r.Body).Decode(&user)
        user.ID = strconv.Itoa(rand.Intn(1000000)) // 随机生成一个ID
        users = append(users, user)
        json.NewEncoder(w).Encode(user)
    }
  2. Dalam kaedah ini, kami mula-mula menggunakan fungsi json.NewDecoder untuk menghuraikan data JSON yang diluluskan dalam Badan permintaan dan menyimpannya kepada pembolehubah bernama pengguna. Kami kemudian menjana ID rawak dan menambahkan pengguna itu ke senarai pengguna.

3. Test Web Service

Kami kini telah melaksanakan perkhidmatan web ringkas yang boleh mengendalikan permintaan GET dan POST serta mengembalikan data JSON dan HTML. Seterusnya, kami perlu menguji perkhidmatan web ini untuk memastikan ia boleh bertindak balas kepada permintaan HTTP dengan betul.

Anda boleh menggunakan Posmen untuk menguji perkhidmatan web ini, atau terus masukkan alamat dalam penyemak imbas untuk menguji.

GET permintaan

    Hantar permintaan GET /users dan semak dua pengguna yang kami tambahkan dalam respons:
GET request

    Hantar GET /user/1 permintaan dan semak butiran Mike dalam jawapan:
POST request

    Hantar POST /user Request untuk menambah pengguna baharu, dan semak dalam respons sama ada maklumat pengguna baharu telah ditambah dengan betul:
  1. 4. Ringkasan

Dalam artikel ini, kami bercakap tentang cara menggunakan Golang dan gorila /mux untuk melaksanakan perkhidmatan web yang ringkas, termasuk memproses permintaan GET dan POST, dan mengembalikan data JSON dan HTML. Walaupun contoh ini mungkin agak ringkas, ia menyediakan titik permulaan yang baik untuk menerokai kekuatan Golang dan mendapatkan pemahaman yang lebih mendalam dalam amalan.

Akhir sekali, kami mengesyorkan agar anda meneruskan pembelajaran secara mendalam selepas membiasakan diri dengan konsep asas Golang dan perkhidmatan web. Meneroka ciri yang lebih maju seperti goroutin, saluran, teknik penghalaan lanjutan, pengesahan dan keselamatan serta menggunakan pangkalan data untuk menyimpan dan mendapatkan data adalah semua konsep penting yang anda perlu kuasai. Saya harap artikel ini memberikan titik permulaan yang berguna untuk pembelajaran anda!

Atas ialah kandungan terperinci Golang melaksanakan perkhidmatan perkhidmatan web. 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
Artikel sebelumnya:golang uuid转stringArtikel seterusnya:golang uuid转string