মডিউল পাঠ (1/5)
সংজ্ঞায়িত এবং একটি struct ব্যবহার
একটি struct নামকৃত ক্ষেত্রকে একটি একক প্রকারে গোষ্ঠী করে। এটা Go এর উপায়
"বস্তু" নির্মাণের — ক্লাসের চেয়ে বেশি আক্ষরিক এবং তাৎক্ষণিক, সহ
কোন উত্তরাধিকার এবং কোন অন্তর্নির্মিত নির্মাণকারী.
ঘোষণা
type Person struct {
Name string
Age int
}type একটি নতুন নামের প্রকার প্রবর্তন করেছে। ক্ষেত্র প্রতি এক লেখা হয়
লাইন, name type। একই ধরনের পরপর ক্ষেত্র শেয়ার করতে পারেন
ঘোষণা: X, Y int
সৃষ্টি
// with named fields (recommended: robust to reordering)
p := Person{Name: "Ada", Age: 36}
// positional (fragile: depends on declaration order)
q := Person{"Ada", 36}
// zero value: every field at its zero value
var r Person // r = {Name: "", Age: 0}
// pointer: allocate with & or new
ptr := &Person{Name: "Ada"}
ptr2 := new(Person) // *Person to a zero-value structক্ষেত্র অ্যাক্সেস
p := Person{Name: "Ada", Age: 36}
fmt.Println(p.Name, p.Age)
p.Age = 37 // mutation (if p is a variable)একটি পয়েন্টারে, ptr.Name সরাসরি কাজ করে: Go সম্পাদন করে
অন্তর্নিহিত সম্মান। সি-তে -> লাইক নেই।
দৃশ্যমানতা: বড় হাতের নিয়ম
বড় হাতের আদ্যক্ষর সহ ক্ষেত্রগুলি রপ্তানি করা হয় (অন্য থেকে দৃশ্যমান প্যাকেজ); ছোট হাতের অক্ষর = বর্তমান প্যাকেজের ব্যক্তিগত।
type User struct {
Name string // exported
salt []byte // private to the package
}একই নিয়ম Go-তে প্রতিটি শনাক্তকারীর ক্ষেত্রে প্রযোজ্য: প্রকার, ফাংশন, ভেরিয়েবল, ক্ষেত্র।
বেনামী এবং নেস্টেড structs
// anonymous (handy for ad-hoc data)
config := struct {
Host string
Port int
}{Host: "localhost", Port: 8080}
// nested
type Address struct {
Street string
City string
}
type Customer struct {
Name string
Address Address
}তুলনীয়তা
দুটি কাঠামো == এর সাথে তুলনাযোগ্য যদি তাদের সমস্ত ক্ষেত্র হয়
তুলনীয় (ভিতরে কোন স্লাইস/মানচিত্র/ফাঙ্কস নেই):
a := Person{Name: "Ada", Age: 36}
b := Person{Name: "Ada", Age: 36}
fmt.Println(a == b) // trueএটি আপনাকে সেগুলিকে মানচিত্র কী হিসাবে ব্যবহার করতে দেয়৷
চেষ্টা করে দেখুন
Name স্ট্রিং এবং Age int দিয়ে ব্যক্তির প্রকার সংজ্ঞায়িত করুন, তারপর এটিকে {Name: 'Ada', Age: 36} হিসেবে ইনস্ট্যান্টিয়েট করুন।
ইঙ্গিত দেখান
সিনট্যাক্স: `টাইপ নাম struct { ফিল্ড টাইপ; ... }`
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
p (একটি বিদ্যমান ব্যক্তি) এর নাম ক্ষেত্রের মান প্রিন্ট করুন।
ইঙ্গিত দেখান
ক্ষেত্র অ্যাক্সেস: `p. Field`।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
অন্য প্যাকেজ থেকে একটি 'নাম স্ট্রিং' ক্ষেত্রের (ছোট হাতের) দৃশ্যমানতা কী?
// in package other
type X struct {
name string
}রিক্যাপ
type Name struct { ... }: নামযুক্ত ক্ষেত্র সহ নতুন নামকরণকৃত প্রকার।- নির্মাণ:
T{Field: value, ...}(প্রস্তাবিত) বা অবস্থানগত। - শূন্য মান: প্রতিটি ক্ষেত্র তার প্রকারের শূন্য।
- একটি পয়েন্টারের জন্য
&T{...}এবংnew(T); অন্তর্নিহিত ডিরেফারেন্স (p.Fieldএ*T)। - বড় হাতের = রপ্তানি করা; ছোট হাতের = প্যাকেজের ব্যক্তিগত।
- সমস্ত ক্ষেত্র থাকলে কাঠামোগুলি
==এর সাথে তুলনীয়; মানচিত্র কী হিসাবে ব্যবহারযোগ্য।