Form alanları için varsayılan değer bağlama
Bazen istemci bir değer göndermediğinde bir alanın varsayılan bir değere dönmesini isteyebilirsiniz. Gin’in form bağlaması, form struct etiketindeki default seçeneği aracılığıyla varsayılan değerleri destekler. Bu, skaler değerler için çalışır ve Gin v1.11’den itibaren açık koleksiyon formatlarıyla koleksiyonlar (dilimler/diziler) için de çalışır.
Önemli noktalar:
- Varsayılanı form anahtarının hemen ardına koyun:
form:"name,default=William". - Koleksiyonlar için, değerlerin nasıl bölüneceğini
collection_format:"multi|csv|ssv|tsv|pipes"ile belirtin. multivecsviçin, varsayılan değerleri ayırmak üzere noktalı virgül kullanın (ör.,default=1;2;3). Gin bunları dahili olarak virgüllere dönüştürür, böylece etiket ayrıştırıcısı belirsizlikten kurtulur.ssv(boşluk),tsv(sekme) vepipes(|) için, varsayılanlarda doğal ayırıcıyı kullanın.
Örnek:
package main
import ( "net/http"
"github.com/gin-gonic/gin")
type Person struct { Name string `form:"name,default=William"` Age int `form:"age,default=10"` Friends []string `form:"friends,default=Will;Bill"` // multi/csv: use ; in defaults Addresses [2]string `form:"addresses,default=foo bar" collection_format:"ssv"` LapTimes []int `form:"lap_times,default=1;2;3" collection_format:"csv"`}
func main() { r := gin.Default() r.POST("/person", func(c *gin.Context) { var req Person if err := c.ShouldBind(&req); err != nil { // infers binder by Content-Type c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } c.JSON(http.StatusOK, req) }) _ = r.Run(":8080")}Herhangi bir gövde olmadan POST yaparsanız, Gin varsayılan değerlerle yanıt verir:
curl -X POST http://localhost:8080/personYanıt (örnek):
{ "Name": "William", "Age": 10, "Friends": ["Will", "Bill"], "Addresses": ["foo", "bar"], "LapTimes": [1, 2, 3]}Notlar ve uyarılar:
- Virgüller Go struct etiket sözdiziminde seçenekleri ayırmak için kullanılır; varsayılan değerlerde virgül kullanmaktan kaçının.
multivecsviçin, noktalı virgüller varsayılan değerleri ayırır; bu formatlar için tek tek varsayılan değerler içinde noktalı virgül kullanmayın.- Geçersiz
collection_formatdeğerleri bağlama hatasına neden olacaktır.
İlgili değişiklikler:
- Form bağlama için koleksiyon formatları (
multi,csv,ssv,tsv,pipes) v1.11 civarında geliştirildi. - Koleksiyonlar için varsayılan değerler v1.11’de eklendi (PR #4048).