Rumah > pembangunan bahagian belakang > Golang > golang gin menyediakan laluan untuk pertanyaan yang berbeza

golang gin menyediakan laluan untuk pertanyaan yang berbeza

PHPz
Lepaskan: 2024-02-14 11:27:08
ke hadapan
546 orang telah melayarinya

golang gin 为不同的查询提供一条路线

editor php Xinyi akan memperkenalkan anda kepada rangka kerja web yang berkuasa, Golang Gin. Gin ialah rangka kerja web ringan berdasarkan Golang yang menyediakan laluan ringkas dan cekap untuk pertanyaan yang berbeza. Sama ada permintaan GET atau permintaan POST, Gin boleh mengendalikannya dengan mudah, menjadikan proses pembangunan anda lebih mudah dan pantas. Sama ada memproses data JSON atau templat HTML, Gin menyediakan fungsi yang kaya dan kebolehskalaan yang fleksibel. Sama ada anda seorang pemula atau pembangun berpengalaman, Gin ialah pilihan terbaik anda.

Kandungan soalan

Adakah mungkin untuk mempunyai laluan yang mengandungi :item (name) 或 :id dalam gin?

Contoh:

r.get("/inventories/(:item|:id)", controllers.findinventory)
Salin selepas log masuk

Kemudian saya mungkin melakukan sesuatu yang serupa...

func FindInventory(g *gin.Context) {
    var inv models.Inventory

    if item:
       err := models.DB.Where("item = ?", g.Param("item")).First(&inv).Error
    else:
       err := models.DB.Where("id = ?", g.Param("id")).First(&inv).Error
       
    if err != nil {
        g.JSON(http.StatusBadRequest, gin.H{"error": "Record not found!"})
        return
    }

    g.JSON(http.StatusOK, gin.H{"data": inv})
}
Salin selepas log masuk

Atau adakah terdapat cara untuk menggunakan satu laluan untuk melaksanakan kedua-dua jenis pertanyaan?

Penyelesaian

Tidak, operasi ini tidak disokong. Tetapi mesti ada beberapa cara untuk membezakan antara item dan id. Jadi mudah untuk melaksanakan logik itu sendiri.

Seperti ini:

r.get("/inventories/:item", controllers.findinventory)
Salin selepas log masuk
func FindInventory(g *gin.Context) {
    var inv models.Inventory

    item := g.Param("item")
    id, err := strconv.Atoi(item)
    if err != nil {
        err := models.DB.Where("item = ?", item).First(&inv).Error
    } else {
        err := models.DB.Where("id = ?", id).First(&inv).Error
    }
    if err != nil {
        g.JSON(http.StatusBadRequest, gin.H{"error": "Record not found!"})
        return
    }

    g.JSON(http.StatusOK, gin.H{"data": inv})
}
Salin selepas log masuk

Tetapi jika ia tidak dapat dibezakan, maka anda perlu mempunyai dua laluan permintaan yang berasingan, seperti

  • /inventories/by-item/:item
  • dan /inventories/by-id/:id

Kemas kini 2023-05-31: Menggabungkan komen daripada @epicadidash dan @boyvinall sebagai jawapan. Terima kasih!

Atas ialah kandungan terperinci golang gin menyediakan laluan untuk pertanyaan yang berbeza. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan