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

golang gin menyediakan laluan untuk pertanyaan yang berbeza

PHPz
PHPzke hadapan
2024-02-14 11:27:08487semak imbas

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)

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})
}

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)
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})
}

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam