মডিউল পাঠ (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")):
কেউ তাদের ব্যাখ্যা না করা পর্যন্ত তারা কেবল স্ট্রিং।
চেষ্টা করে দেখুন
Name ফিল্ডে json:"nome" ট্যাগ এবং Age ফিল্ডে 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
encoding/json. json.Marshal(v)↔json.Unmarshal(ডেটা, &v)(pointer).- Same mechanism for
xml,yaml,db,validate,form, …