தொகுதி பாடங்கள் (4/5)
புல குறிச்சொற்கள் மற்றும் JSON
குறிச்சொற்கள் ஸ்ட்ரக்ட் புலங்களில் உள்ள மெட்டாடேட்டா சரங்கள், பிரதிபலிப்பு மூலம் படிக்கப்படும்
encoding/json, encoding/xml, மதிப்பீட்டாளர்கள், ORMகள் போன்ற நூலகங்கள் மூலம். அவர்கள்
புலத்தின் வகைக்குப் பிறகு பேக்டிக்குகள் (மூல சரம்) இடையே எழுதப்படும்.
தொடரியல்
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" குறிச்சொல்லையும், வயது புலத்தில் json:"eta" குறிச்சொல்லையும் சேர்க்கவும்.
குறிப்பைக் காட்டு
குறிச்சொற்கள் என்பது புல வகைக்குப் பிறகு பேக்டிக்குகளுக்கு இடையே உள்ள மூலச் சரங்களாகும்.
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))மறுபரிசீலனை
- குறிச்சொற்கள் பேக்டிக்குகளுக்கு இடையே உள்ள மூலச் சரங்கள்:
`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, …