మాడ్యూల్ పాఠాలు (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" | గో ఫీల్డ్ పేరును 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:"..."— గో-ప్లేగ్రౌండ్/వాలిడేటర్form:"..."— జిన్ / ఎకో బైండింగ్
లైబ్రరీలు వాటిని ప్రతిబింబం (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:"value" key2:"value2"`. json:"nome": rename.omitempty: omit if zero value._-_: exclude.- NON-exported (lowercase) fields are ignored by
ఎన్కోడింగ్/json. json.Marshal(v)↔json.అన్మార్షల్(డేటా, &v)(pointer).- Same mechanism for
xml,yaml,db,validate,form, …