আমি মনে করি এবং এটি জেনে রাখা গুরুত্বপূর্ণ যে আপনি যদি গন্তব্য স্লাইস (আপনি যে স্লাইসটি সংযোজন করেন) এর যথেষ্ট ক্ষমতা থাকে তবে গন্তব্যটিকে বিশ্লেষণ করে (স্থানটি তার স্থানে বৃদ্ধি করার লক্ষ্যে সংলগ্নকরণ) সংযোজন দ্বারা "স্থান" হয়ে যাবে সংযোজনযোগ্য উপাদান সমন্বয় করতে সক্ষম)।
এর অর্থ হ'ল যদি গন্তব্যটি বৃহত অ্যারে বা টুকরো টুকরো করে তৈরি করা হয়েছিল যার ফলস্বরূপ স্লাইসের দৈর্ঘ্যের বাইরে অতিরিক্ত উপাদান রয়েছে তবে তারা ওভাররাইট হয়ে যেতে পারে।
প্রদর্শনের জন্য, এই উদাহরণটি দেখুন:
a := [10]int{1, 2}
fmt.Printf("a: %v\n", a)
x, y := a[:2], []int{3, 4}
fmt.Printf("x: %v, y: %v\n", x, y)
fmt.Printf("cap(x): %v\n", cap(x))
x = append(x, y...)
fmt.Printf("x: %v\n", x)
fmt.Printf("a: %v\n", a)
আউটপুট ( গো খেলার মাঠে এটি চেষ্টা করুন ):
a: [1 2 0 0 0 0 0 0 0 0]
x: [1 2], y: [3 4]
cap(x): 10
x: [1 2 3 4]
a: [1 2 3 4 0 0 0 0 0 0]
a
দৈর্ঘ্য সহ আমরা একটি "ব্যাকিং" অ্যারে তৈরি করেছি 10
। তারপরে আমরা x
এই a
অ্যারেটি কেটে গন্তব্য স্লাইস তৈরি করি , y
সংমিশ্রিত আক্ষরিক ব্যবহার করে স্লাইস তৈরি করা হয় []int{3, 4}
। এখন যখন আমরা যোগ y
করতে x
, ফলে প্রত্যাশিত হয় [1 2 3 4]
, কিন্তু কি বিস্ময়কর যেতে পারে যে ব্যাকিং অ্যারে a
এটাও একটা কারণ ক্ষমতা পরিবর্তন x
হয় 10
যা যথেষ্ট সংযোজন করতে y
এটি, তাই x
resliced যা একই ব্যবহার করবে a
ব্যাকিং অ্যারে, এবং সেখানে append()
উপাদান অনুলিপি y
করা হবে।
আপনি এই এড়াতে চান, তাহলে আপনি একটি ব্যবহার করতে পারেন সম্পূর্ণ ফালি অভিব্যক্তি যা ফর্ম আছে
a[low : high : max]
যা একটি স্লাইস তৈরি করে এবং এটিকে সেট করে ফলাফলের স্লাইসের ক্ষমতা নিয়ন্ত্রণ করে max - low
।
পরিবর্তিত উদাহরণ দেখুন (শুধুমাত্র পার্থক্য আমরা তৈরি করে x
ভালো: x = a[:2:2]
:
a := [10]int{1, 2}
fmt.Printf("a: %v\n", a)
x, y := a[:2:2], []int{3, 4}
fmt.Printf("x: %v, y: %v\n", x, y)
fmt.Printf("cap(x): %v\n", cap(x))
x = append(x, y...)
fmt.Printf("x: %v\n", x)
fmt.Printf("a: %v\n", a)
আউটপুট ( গো খেলার মাঠে এটি চেষ্টা করুন )
a: [1 2 0 0 0 0 0 0 0 0]
x: [1 2], y: [3 4]
cap(x): 2
x: [1 2 3 4]
a: [1 2 0 0 0 0 0 0 0 0]
আপনি দেখতে পাচ্ছেন, আমরা একই x
ফল পেয়েছি তবে ব্যাকিং অ্যারে a
পরিবর্তন হয়নি, কারণ ক্ষমতা x
"কেবল" ছিল 2
(সম্পূর্ণ স্লাইস এক্সপ্রেশনকে ধন্যবাদ a[:2:2]
)। সুতরাং সংযোজনটি করতে, একটি নতুন ব্যাকিং অ্যারে বরাদ্দ করা হয়েছে যা উভয়ের উপাদান সংরক্ষণ করতে পারে x
এবং y
যা পৃথক a
।
append()
একটি ভেরিয়াদিক ফাংশন, এবং...
আপনাকে একটি স্লাইস থেকে ভেরিয়াদিক ফাংশনে একাধিক যুক্তি দেয়।