একটি ক্ষেত্রের জন্য একটি ট্যাগ আপনাকে ক্ষেত্রের সাথে মেটা-তথ্য সংযুক্ত করতে দেয় যা প্রতিচ্ছবি ব্যবহার করে অধিগ্রহণ করা যেতে পারে। সাধারণত এটি স্ট্রাক্ট ফিল্ডকে কীভাবে অন্য বিন্যাসে এনকোড করা হয় বা অন্য ফর্ম্যাট থেকে ডিকোড করা হয় (বা কোনও ডাটাবেস থেকে সঞ্চিত / পুনরুদ্ধার করা হয়) এর রূপান্তর তথ্য সরবরাহ করতে ব্যবহৃত হয়, তবে আপনি যা চান মেটা-তথ্য সংরক্ষণ করতে এটি ব্যবহার করতে পারেন, অন্য কোনও উদ্দেশ্যে তৈরি করা হয়েছে প্যাকেজ বা আপনার নিজস্ব ব্যবহারের জন্য।
যেমন ডকুমেন্টেশনে উল্লিখিত হয়েছে reflect.StructTag
, কনভেনশন অনুসারে একটি ট্যাগ স্ট্রিংয়ের মান হ'ল জোড়গুলির স্থান-বিভাজিত তালিকা key:"value"
:
type User struct {
Name string `json:"name" xml:"name"`
}
key
সাধারণত প্যাকেজ যে পরবর্তী নির্দেশ "value"
জন্য জন্য উদাহরণ json
কী প্রসেস করা হয় / দ্বারা ব্যবহৃত encoding/json
প্যাকেজ।
যদি একাধিক তথ্য পাস করতে হয় তবে "value"
সাধারণত এটি কমা ( ','
) দিয়ে আলাদা করে নির্দিষ্ট করা হয়
Name string `json:"name,omitempty" xml:"name"`
প্রক্রিয়াটি থেকে ক্ষেত্রটিকে বাদ দেওয়ার '-'
জন্য সাধারণত একটি ড্যাশ মান ( ) এর "value"
অর্থ হল ক্ষেত্রটি json
মার্শাল বা আনমশাল নয় ma
প্রতিবিম্ব ব্যবহার করে আপনার কাস্টম ট্যাগ অ্যাক্সেস করার উদাহরণ
reflect
স্ট্রাক্ট ক্ষেত্রগুলির ট্যাগ মানগুলিতে অ্যাক্সেস করতে আমরা প্রতিবিম্ব ( প্যাকেজ) ব্যবহার করতে পারি । মূলত Type
আমাদের আমাদের স্ট্রাক্টটি অর্জন করতে হবে এবং তারপরে আমরা ক্ষেত্রগুলি যেমন Type.Field(i int)
বা এর সাথে কোয়েরি করতে পারি Type.FieldByName(name string)
। এই পদ্ধতিগুলি এমন একটি মান দেয় StructField
যা কোন স্ট্রাক্ট ক্ষেত্রের বর্ণনা / প্রতিনিধিত্ব করে; এবং StructField.Tag
এমন একটি মান StructTag
যা কোনও ট্যাগ মানকে বর্ণনা করে / উপস্থাপন করে।
পূর্বে আমরা "সম্মেলন" সম্পর্কে কথা বলেছিলাম । এই কনভেনশন মানে যদি আপনি এটি অনুসরণ আপনি ব্যবহার করতে পারে যে StructTag.Get(key string)
পদ্ধতি যা একটি ট্যাগ এর মান parses এবং আপনি ফেরৎ "value"
এর key
আপনি উল্লেখ করুন। এই পদ্ধতিতে কনভেনশনটি কার্যকর / নির্মিত হয় Get()
। আপনি যদি কনভেনশনটি অনুসরণ Get()
না করেন তবে জোড়াটি পার্স করতে পারবেন key:"value"
এবং আপনি যা সন্ধান করছেন তা খুঁজে পাবেন না। এটিও কোনও সমস্যা নয়, তবে তারপরে আপনাকে নিজের পার্সিং যুক্তি প্রয়োগ করতে হবে।
এছাড়াও রয়েছে StructTag.Lookup()
(Go 1.7 তে যুক্ত হয়েছিল) যা "লাইক Get()
দিলেও প্রদত্ত কীটির সাথে ফাঁকা স্ট্রিং যোগ করে ট্যাগ থেকে প্রদত্ত কীটি না থাকা ট্যাগটিকে পৃথক করে" ।
সুতরাং আসুন একটি সহজ উদাহরণটি দেখুন:
type User struct {
Name string `mytag:"MyName"`
Email string `mytag:"MyEmail"`
}
u := User{"Bob", "bob@mycompany.com"}
t := reflect.TypeOf(u)
for _, fieldName := range []string{"Name", "Email"} {
field, found := t.FieldByName(fieldName)
if !found {
continue
}
fmt.Printf("\nField: User.%s\n", fieldName)
fmt.Printf("\tWhole tag value : %q\n", field.Tag)
fmt.Printf("\tValue of 'mytag': %q\n", field.Tag.Get("mytag"))
}
আউটপুট ( গো খেলার মাঠে এটি চেষ্টা করুন ):
Field: User.Name
Whole tag value : "mytag:\"MyName\""
Value of 'mytag': "MyName"
Field: User.Email
Whole tag value : "mytag:\"MyEmail\""
Value of 'mytag': "MyEmail"
গোফারকন 2015 এর স্ট্রাক্ট ট্যাগগুলি সম্পর্কে একটি উপস্থাপনা ছিল:
স্ট্রাক্ট ট্যাগের অনেকগুলি মুখ (স্লাইড) (এবং একটি ভিডিও )
এখানে সাধারণত ব্যবহৃত ট্যাগ কীগুলির একটি তালিকা রয়েছে: