Rumah pembangunan bahagian belakang Golang Amalkan bahasa: menggunakan gin untuk membina API Web yang cekap

Amalkan bahasa: menggunakan gin untuk membina API Web yang cekap

Jun 18, 2023 am 09:10 AM
pergi bahasa web api gin

Dengan pembangunan berterusan teknologi Internet, API Web telah menjadi blok binaan teras aplikasi moden. Kepantasan, kecekapan dan kebolehskalaan API Web adalah penting dalam dunia Internet hari ini. Untuk mencapai matlamat ini, bahasa Go, sebagai bahasa pengaturcaraan yang pantas, cekap dan serentak, telah menjadi pilihan pertama banyak pembangun web.

Dalam artikel ini, kami akan memperkenalkan cara menggunakan rangka kerja Gin untuk membina API Web yang cekap, dan juga menerangkan prinsip asas dan teknik pembangunan rangka kerja Gin. Kandungan utama artikel ini termasuk:

  1. Pengenalan kepada rangka kerja Gin

Rangka kerja Gin ialah rangka kerja Web berasaskan HTTP yang menggunakan reka bentuk yang ringan dan mempunyai prestasi cemerlang dan kebolehpercayaan. Berbanding dengan rangka kerja lain, penghalaan Gin dan pemprosesan perisian tengah adalah ciri terasnya.

  1. Pasang Gin dengan cepat

Anda boleh mendapatkan panduan pemasangan dan dokumentasi dengan mudah melalui halaman GitHub Gin. Atas alasan bahawa bahasa Go telah dipasang sebelum ini, kami boleh memasang Gin melalui arahan berikut:

$ go get github.com/gin-gonic/gin
Salin selepas log masuk
  1. Bina aplikasi Gin pertama

Kini kami telah memasangnya Gin, seterusnya kami akan membina perkhidmatan HTTP mudah sebagai aplikasi Gin pertama kami. Sila ikuti langkah berikut:

  • Buat fail bernama main.go
  • Import perpustakaan yang diperlukan
package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    // 初始化Gin
    r := gin.Default()

    // 定义一个处理路由
    r.GET("/", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "Hello Gin World!",
        })
    })

    // 启动HTTP服务
    r.Run(":8000")
}
Salin selepas log masuk

Dengan menjalankan arahan berikut Untuk memulakan HTTP perkhidmatan:

$ go run main.go
Salin selepas log masuk

Memandangkan kami telah berjaya memulakan perkhidmatan HTTP, jalankan http://localhost:8000/ dan anda akan melihat respons berikut:

{
    "message": "Hello Gin World!"
}
Salin selepas log masuk
  1. Tentukan laluan dan perisian tengah

Menggunakan rangka kerja Gin, kami boleh menentukan laluan dan perisian tengah dengan mudah untuk mengendalikan permintaan dan respons HTTP. Berikut ialah contoh aplikasi Gin dengan laluan dan perisian tengah yang berbeza:

package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    // 初始化Gin
    r := gin.Default()

    // 定义一个中间件
    r.Use(func(c *gin.Context) {
        c.Set("version", "1.0")
        c.Next()
    })

    // 定义路由
    r.GET("/", func(c *gin.Context) {
        version := c.MustGet("version").(string)
        c.JSON(200, gin.H{
            "message": "Hello Gin World!",
            "version": version,
        })
    })

    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })

    // 启动HTTP服务
    r.Run(":8000")
}
Salin selepas log masuk
  • Dalam contoh ini, kami mentakrifkan perisian tengah yang menetapkan maklumat versi sebelum setiap permintaan diproses.
  • Kami juga mentakrifkan dua laluan: /ping dan /. Laluan /ping akan bertindak balas dengan rentetan JSON yang mewakili tindak balas pong mudah. /route akan bertindak balas dengan rentetan JSON lain yang mengandungi mesej dan maklumat versi untuk "Hello Gin World!"
  1. Mengendalikan permintaan dan respons HTTP

Melalui rangka kerja Gin, kami boleh mengendalikan pelbagai permintaan dan respons HTTP dengan mudah. Gin menyediakan satu siri fungsi pemprosesan terbina dalam yang membolehkan kami mengendalikan permintaan HTTP dengan cepat. Berikut ialah beberapa fungsi pemprosesan terbina dalam yang biasa digunakan:

  • c.Param(): Dapatkan parameter penghalaan berdasarkan gin.Konteks
  • c.Query(): Dapatkan parameter penghalaan berdasarkan gin.Parameter Pertanyaan Konteks
  • c.PostForm(): Dapatkan nilai medan borang berdasarkan gin.Context
  • c.File(): Hantar respons dengan kandungan fail yang ditentukan

Berikut ialah contoh aplikasi Gin yang mengandungi fungsi pemprosesan terbina dalam yang biasa digunakan:

package main

import (
    "github.com/gin-gonic/gin"
)

type User struct {
    ID       int    `json:"id"`
    Name     string `json:"name"`
    Username string `json:"username"`
    Email    string `json:"email"`
}

func main() {
    // 初始化Gin
    r := gin.Default()

    // 定义路由
    r.GET("/users/:id", getUser)
    r.GET("/users", getUsers)
    r.POST("/users", createUser)
    r.PUT("/users/:id", updateUser)
    r.DELETE("/users/:id", deleteUser)

    // 启动HTTP服务
    r.Run(":8000")
}

func getUser(c *gin.Context) {
    id := c.Param("id")

    // 获取用户信息
    user := User{
        ID:       1,
        Name:     "John Doe",
        Username: "johndoe",
        Email:    "johndoe@example.com",
    }

    // 返回用户信息
    c.JSON(200, gin.H{
        "data": user,
    })
}

func getUsers(c *gin.Context) {
    // 获取所有用户信息
    users := []User{
        {
            ID:       1,
            Name:     "John Doe",
            Username: "johndoe",
            Email:    "johndoe@example.com",
        },
        {
            ID:       2,
            Name:     "Jane Doe",
            Username: "janedoe",
            Email:    "janedoe@example.com",
        },
    }

    // 返回所有用户信息
    c.JSON(200, gin.H{
        "data": users,
    })
}

func createUser(c *gin.Context) {
    // 获取新用户信息
    user := User{
        ID:       3,
        Name:     "Foo Bar",
        Username: "foobar",
        Email:    "foobar@example.com",
    }

    // 返回新用户信息
    c.JSON(200, gin.H{
        "data": user,
    })
}

func updateUser(c *gin.Context) {
    id := c.Param("id")

    // 获取更新的用户信息
    user := User{
        ID:       1,
        Name:     "John Doe",
        Username: "johndoe",
        Email:    "johndoe@example.com",
    }

    // 返回更新后的用户信息
    c.JSON(200, gin.H{
        "data": user,
    })
}

func deleteUser(c *gin.Context) {
    id := c.Param("id")

    // 删除指定的用户信息
    c.JSON(200, gin.H{
        "message": "User deleted successfully",
    })
}
Salin selepas log masuk

Dalam contoh ini, kami telah mentakrifkan lima laluan, setiap satunya mengendalikan kaedah permintaan dan jawapan yang berbeza. Dengan mengasingkan permintaan dan respons ini kepada fungsi yang berbeza, kami boleh menjadikan kod lebih mudah difahami dan diselenggara.

  1. Kesimpulan

Artikel ini memperkenalkan anda cara menggunakan rangka kerja Gin untuk membina API Web yang cekap. Selain itu, prinsip asas dan teknik pembangunan rangka kerja Gin juga diperkenalkan, termasuk penghalaan dan pemprosesan perisian tengah, permintaan HTTP dan pemprosesan tindak balas, dsb. Dengan sokongan rangka kerja Gin, bahasa Go telah menjadi platform pembangunan web yang berkuasa yang boleh memenuhi keperluan aplikasi dari semua saiz.

Atas ialah kandungan terperinci Amalkan bahasa: menggunakan gin untuk membina API Web yang cekap. 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 尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
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)

Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Apr 02, 2025 pm 02:06 PM

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Apakah masalah dengan thread giliran di crawler colly go? Apakah masalah dengan thread giliran di crawler colly go? Apr 02, 2025 pm 02:09 PM

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Apr 02, 2025 pm 02:03 PM

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Apr 02, 2025 pm 04:54 PM

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apr 02, 2025 pm 05:09 PM

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apabila menggunakan Goland untuk Pembangunan Bahasa GO, banyak pemaju akan menghadapi tag struktur tersuai ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau disediakan oleh projek sumber terbuka yang terkenal? Perpustakaan mana yang dibangunkan oleh syarikat besar atau disediakan oleh projek sumber terbuka yang terkenal? Apr 02, 2025 pm 04:12 PM

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apr 02, 2025 pm 12:57 PM

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

Apabila menggunakan sql.open, mengapa tidak melaporkan ralat apabila DSN berlalu kosong? Apabila menggunakan sql.open, mengapa tidak melaporkan ralat apabila DSN berlalu kosong? Apr 02, 2025 pm 12:54 PM

Apabila menggunakan SQL.Open, mengapa DSN tidak melaporkan ralat? Dalam bahasa Go, sql.open ...

See all articles