Bind body ke struct yang berbeda
Metode normal untuk binding body permintaan akan menggunakan c.Request.Body dan tidak dapat dipanggil berkali-kali.
type formA struct {  Foo string `json:"foo" xml:"foo" binding:"required"`}
type formB struct {  Bar string `json:"bar" xml:"bar" binding:"required"`}
func SomeHandler(c *gin.Context) {  objA := formA{}  objB := formB{}  // c.ShouldBind ini menggunakan c.Request.Body dan tidak dapat digunakan kembali.  if errA := c.ShouldBind(&objA); errA == nil {    c.String(http.StatusOK, `the body should be formA`)  // Ini akan selalu menghasilkan error karena c.Request.Body sekarang sudah EOF.  } else if errB := c.ShouldBind(&objB); errB == nil {    c.String(http.StatusOK, `the body should be formB`)  } else {    ...  }}Untuk kasus ini, Anda dapat menggunakan c.ShouldBindBodyWith.
func SomeHandler(c *gin.Context) {  objA := formA{}  objB := formB{}  // Membaca c.Request.Body dan menyimpan hasilnya ke dalam context.  if errA := c.ShouldBindBodyWith(&objA, binding.JSON); errA == nil {    c.String(http.StatusOK, `the body should be formA`)  // Menggunakan kembali body yang tersimpan di dalam context.  } else if errB := c.ShouldBindBodyWith(&objB, binding.JSON); errB == nil {    c.String(http.StatusOK, `the body should be formB JSON`)  // Dapat menerima format lain juga  } else if errB2 := c.ShouldBindBodyWith(&objB, binding.XML); errB2 == nil {    c.String(http.StatusOK, `the body should be formB XML`)  } else {    ...  }}- c.ShouldBindBodyWithmenyimpan body ke dalam context sebelum melakukan binding. Ini sedikit berdampak pada performa, jadi Anda sebaiknya tidak menggunakan metode ini jika Anda hanya memanggil binding sekali saja.
- Fitur ini hanya untuk beberapa format — JSON,XML,MsgPack,ProtoBuf. Untuk format lain,Query,Form,FormPost,FormMultipart, dapat dipanggil denganc.ShouldBind()berkali-kali tanpa mengganggu performa (lihat #1341).
