முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 5 · பாடம் 4 இன் 5பாடத்திட்டத்தில் 24/50~12 min
தொகுதி பாடங்கள் (4/5)

புல குறிச்சொற்கள் மற்றும் JSON

குறிச்சொற்கள் ஸ்ட்ரக்ட் புலங்களில் உள்ள மெட்டாடேட்டா சரங்கள், பிரதிபலிப்பு மூலம் படிக்கப்படும் encoding/json, encoding/xml, மதிப்பீட்டாளர்கள், ORMகள் போன்ற நூலகங்கள் மூலம். அவர்கள் புலத்தின் வகைக்குப் பிறகு பேக்டிக்குகள் (மூல சரம்) இடையே எழுதப்படும்.

தொடரியல்

Go
type User struct {
    Name string `json:"nome"`
    Age  int    `json:"eta,omitempty"`
}

மாநாட்டின் வடிவமைப்பு: key:"value" இடைவெளிகளால் பிரிக்கப்பட்டது (இல்லை காற்புள்ளிகள்) பல விசைகளுக்கு:

Go
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
Go
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 ஆகும் முற்றிலும் விலக்கப்பட்டது.

மார்ஷல் மற்றும் அன்மார்ஷல்

Go
// struct -> JSON
b, err := json.Marshal(u)

// JSON -> struct (needs a POINTER)
var u2 User
err = json.Unmarshal(b, &u2)

Unmarshal ஒரு சுட்டியை மட்டுமே ஏற்றுக்கொள்கிறது, ஏனெனில் அது அதில் எழுத வேண்டும் மதிப்பு புலங்கள்.

பிற பொதுவான குறிச்சொற்கள்

  • xml:"..." — encoding/xml
  • yaml:"..." — yaml.v3
  • db:"..." — sqlx / pgx
  • validate:"..." — go-playground/validator
  • form:"..." — ஜின் / எக்கோ பைண்டிங்

நூலகங்கள் பிரதிபலிப்பு (reflect.StructTag.Get("json")): யாராவது அவற்றைப் புரிந்துகொள்ளும் வரை அவை வெறும் சரங்களாகவே இருக்கும்.

முயற்சி செய்து பாருங்கள்

உடற்பயிற்சி#go.m5.l4.e1
முயற்சிகள்: 0ஏற்றுகிறது…

பெயர் புலத்தில் json:"nome" குறிச்சொல்லையும், வயது புலத்தில் json:"eta" குறிச்சொல்லையும் சேர்க்கவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

குறிச்சொற்கள் என்பது புல வகைக்குப் பிறகு பேக்டிக்குகளுக்கு இடையே உள்ள மூலச் சரங்களாகும்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

உடற்பயிற்சி#go.m5.l4.e2
முயற்சிகள்: 0ஏற்றுகிறது…

வயது புலத்தில் omitempty விருப்பத்தைச் சேர்க்கவும்: அது 0 ஆக இருக்கும்போது தவிர்க்கப்பட வேண்டும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

விருப்பங்கள் பெயருக்குப் பிறகு வரும், கமாவால் பிரிக்கப்படும்: json:"nome,omitempty".

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

Quiz#go.m5.l4.e3
தயார்

இது json:"nome" மற்றும் json:"eta" குறிச்சொற்களுடன் எதை அச்சிடுகிறது?

Go
u := User{Name: "Ada", Age: 36}
b, _ := json.Marshal(u)
fmt.Println(string(b))
பதில் விருப்பங்கள்

மறுபரிசீலனை

  • குறிச்சொற்கள் பேக்டிக்குகளுக்கு இடையே உள்ள மூலச் சரங்கள்: `key:"மதிப்பு" key2:"மதிப்பு2"`.
  • json:"nome": rename. omitempty: omit if zero value. _-_: exclude.
  • NON-exported (lowercase) fields are ignored by encoding/json.
  • json.Marshal(v) ↔ json.Unmarshal(data, &v) (pointer).
  • Same mechanism for xml, yaml, db, validate, form, …