মূল কন্টেন্টে যান
মডিউল 4 · 1-এর পাঠ 5কোর্সে 16/50~8 min
মডিউল পাঠ (1/5)

স্থির-দৈর্ঘ্যের অ্যারে

গো-তে একটি অ্যারে এর একটি নির্দিষ্ট দৈর্ঘ্য রয়েছে, এটির প্রকারে বেক করা হয়েছে: [N]T। এটি একটি আদিম যা খুব কমই সরাসরি অ্যাপ্লিকেশন কোডে ব্যবহৃত হয় — আপনি করবেন প্রায় সবসময় স্লাইস (পরবর্তী পাঠ) নিয়ে কাজ করুন, যা গতিশীল অ্যারের উপর ভিউ।

তবুও, অ্যারেগুলি ভালভাবে বোঝা অপরিহার্য: গো-তে সবকিছু তৈরি করা হয়েছে তাদের উপরে।

ঘোষণা এবং সূচনা

Go
var a [3]int = [3]int{10, 20, 30}
b := [3]int{1, 2, 3}            // inference with :=
c := [3]int{}                   // all zero: [0, 0, 0]
d := [...]int{1, 2, 3, 4}       // length inferred = 4

একটি অ্যারের শূন্য মান হল ঘোষিত দৈর্ঘ্যের একটি অ্যারে যার সাথে প্রতিটি উপাদান তার শূন্য মান:

Go
var nums [5]int  // [0 0 0 0 0]

ইন্ডেক্সিং এবং len

Go
a := [3]int{10, 20, 30}
fmt.Println(a[0])      // 10
a[1] = 99
fmt.Println(len(a))    // 3

সীমার বাইরের অ্যাক্সেস রানটাইম প্যানিক সৃষ্টি করে (একটি নীরব অনির্ধারিত নয় যেমন সি)।

দৈর্ঘ্য টাইপের অংশ

Go
var a [3]int
var b [4]int
// a = b   // ERROR: different types

[3]int এবং [4]int হল স্বতন্ত্র প্রকার, যদিও উভয়ই ধারণ করে int। এই কারণেই অ্যারেগুলি খুব কমই ফাংশনে পাস করা হয়: আপনাকে এটি করতে হবে প্যারামিটার টাইপের মধ্যে দৈর্ঘ্যকে হার্ড-কোড করুন।

মান দ্বারা অনুলিপি

স্লাইস (রেফারেন্স) এবং মানচিত্র (রেফারেন্স) থেকে ভিন্ন, অ্যারে ** দ্বারা অনুলিপি করা হয় মান**:

Go
a := [3]int{1, 2, 3}
b := a               // copy
b[0] = 99
fmt.Println(a[0])    // 1 — a is unchanged

একটি ফাংশনে পাস করার সময় একই প্রযোজ্য: ফাংশনটি তার গ্রহণ করে নিজস্ব অনুলিপি।

কখন অ্যারে ব্যবহার করবেন?

  • কম্পাইলের সময় পরিচিত স্থির-আকারের বাফার (যেমন [16]byte একটি MD5 এর জন্য)।
  • যৌগিক মানচিত্র কী (স্লাইসগুলি "তুলনাযোগ্য" নয়, অ্যারেগুলি)।
  • চরম কর্মক্ষমতা (কোনও পরোক্ষ, ক্যাশে-বান্ধব)

99% কোডের জন্য: স্লাইস ব্যবহার করুন।

চেষ্টা করে দেখুন

ব্যায়াম#go.m4.l1.e1
প্রচেষ্টা: 0লোড হচ্ছে...

10, 20, 30 মান সহ একটি 3 ইন্টের অ্যারে হিসাবে ঘোষণা করুন এবং এর দৈর্ঘ্য প্রিন্ট করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

অ্যারে আক্ষরিক: `[3]int{a, b, c}`।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম#go.m4.l1.e2
প্রচেষ্টা: 0লোড হচ্ছে...

b কে 5 ints (সমস্ত শূন্য) এর অ্যারে হিসাবে ঘোষণা করুন এবং 2 অবস্থানে 99 নির্ধারণ করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

`var b [5]int` শুরু হয় [0 0 0 0 0] হিসেবে।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

Quiz#go.m4.l1.e3
প্রস্তুত

[3]int এবং [4]int কি একই প্রকার?

Go
var a [3]int
var b [4]int
// a = b ?
উত্তরের বিকল্প

রিক্যাপ

  • [N]T: নির্দিষ্ট দৈর্ঘ্য, প্রকারের অংশ।
  • শূন্য মান: প্রতিটি উপাদান তার শূন্য মান।
  • [...]int{...} কম্পাইলারকে দৈর্ঘ্য অনুমান করতে দেয়।
  • মান দ্বারা অনুলিপি (ভিতরের ফাংশন সহ)।
  • সীমার বাইরে = আতঙ্ক, অনির্ধারিত নয়।
  • অনুশীলনে, স্লাইস ব্যবহার করুন, যা অ্যারেগুলির উপর দৃষ্টিভঙ্গি।