ماڈیول اسباق (4/5)
فیلڈ ٹیگز اور JSON
سٹرک فیلڈز پر ٹیگز میٹا ڈیٹا سٹرنگز ہیں، جن کو عکاسی کے ذریعے پڑھا جاتا ہے۔
بذریعہ لائبریریاں جیسے encoding/json, encoding/xml, validators, ORMs۔ وہ
فیلڈ کی قسم کے بالکل بعد backticks (کچی تار) کے درمیان لکھے جاتے ہیں۔
نحو
type User struct {
Name string `json:"nome"`
Age int `json:"eta,omitempty"`
}فارمیٹ کنونشن: key:"value" خالی جگہوں سے الگ (نہیں
کوما) ایک سے زیادہ چابیاں کے لیے:
type User struct {
Email string `json:"email" validate:"required,email"`
}json ٹیگ: اختیارات
سب سے عام آپشن json ہے، جو encoding/json کے ذریعے استعمال کیا جاتا ہے:
| ٹیگ | اثر |
| ----------------------- | ----------------------------------------------------- | ------- |
| json:"nome" | JSON آؤٹ پٹ میں فیلڈ کا نام بدل کر nome کر دیتا ہے۔ |
| json:"nome,omitempty" | اگر یہ اپنی صفر قدر پر ہے تو فیلڈ کو چھوڑ دیتا ہے |
| json:"-" | اس فیلڈ کو سیریلائز/ڈی سیریلائز نہ کریں |
| json:",omitempty" | Go فیلڈ کا نام رکھتا ہے لیکن omitempty | کے ساتھ |
type User struct {
Name string `json:"nome"`
Age int `json:"eta,omitempty"`
Password string `json:"-"`
}
u := User{Name: "Ada", Age: 0, Password: "segreto"}
b, _ := json.Marshal(u)
fmt.Println(string(b)) // {"nome":"Ada"}Age کو چھوڑ دیا گیا ہے (صفر قدر 0 + omitempty); Password ہے
مکمل طور پر خارج.
مارشل اور انمارشل
// struct -> JSON
b, err := json.Marshal(u)
// JSON -> struct (needs a POINTER)
var u2 User
err = json.Unmarshal(b, &u2)Unmarshal صرف ایک پوائنٹر کو قبول کرتا ہے، کیونکہ اسے میں لکھنا ضروری ہے۔
قدر کے فیلڈز۔
دوسرے عام ٹیگز
xml:"..."—encoding/xmlyaml:"..."— yaml.v3db:"..."— sqlx / pgxvalidate:"..."— go-playground/validatorform:"..."— جن / ایکو بائنڈنگ
لائبریریاں انہیں عکاسی کے ذریعے پڑھتی ہیں (reflect.StructTag.Get("json")):
وہ صرف تار ہیں جب تک کہ کوئی ان کی ترجمانی نہ کرے۔
اسے آزمائیں
json:"nome" ٹیگ کو Name فیلڈ میں اور json:"eta" ٹیگ کو Age فیلڈ میں شامل کریں۔
اشارہ دکھائیں۔
ٹیگز فیلڈ کی قسم کے بالکل بعد بیک ٹِکس کے درمیان خام تار ہیں۔
3 کوششوں کے بعد حل دستیاب ہے۔
عمر کے خانے میں omitempty آپشن شامل کریں: 0 ہونے پر اسے چھوڑ دینا چاہیے۔
اشارہ دکھائیں۔
اختیارات نام کے بعد آتے ہیں، کوما سے الگ کیا جاتا ہے: json:"nome,omitempty"۔
3 کوششوں کے بعد حل دستیاب ہے۔
یہ ٹیگز json:"nome" اور json:"eta" کے ساتھ کیا پرنٹ کرتا ہے؟
u := User{Name: "Ada", Age: 36}
b, _ := json.Marshal(u)
fmt.Println(string(b))Recap
- ٹیگز بیک ٹِکس کے درمیان خام تار ہیں: ``
key:"value" key2:"value2"\_. json:"nome": rename.omitempty__PROTECTED_INLINE_ 28__-: exclude.- NON-exported (lowercase) fields are ignored by
encoding/json. json.Marshal(v)↔json.Unmarshal(ڈیٹا، &v)(pointer).- Same mechanism for
xml,yaml,db,validate,form, …