"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > شرائح: العمود الفقري للذهاب!

شرائح: العمود الفقري للذهاب!

نشر في 2025-03-23
تصفح:813

Slices: The Backbone of Go!

حسناً ، دعنا نغوص في واحدة من أكثر الميزات متعددة الاستخدامات وأساسية - شرائح. إذا كنت قادمًا من لغة أخرى ، فقد تفكر في شرائح مماثلة للمصفوفات. ونعم ، لديهم بعض أوجه التشابه ، لكن الشرائح تجلب المزيد من القوة والمرونة والسحر الخاص بالذهاب إلى الطاولة! ؟

ما هي شريحة على أي حال؟ ؟

؛ لا حاجة لتحديد طول ثابت مقدمًا كما تفعل مع صفيف. إنهم مدعومون بالمصفوفات أسفل الغطاء ، لكنك تحصل على مزيد من التحكم. فكر فيهم كأخوة أكثر برودة وأكثر مرونة.

لذا ، فإن شريحة GO هي في الواقع "نافذة" على صفيف أساسي. يمكنك تغيير حجم هذه النافذة عن طريق النمو أو تقليصها - وهي ناعمة مثل تقطيع قطعة من الكعكة. ؟

إنشاء شريحة؟

إنشاء شريحة واضح ومباشر:

// باستخدام حرفي الأرقام: = [] int {1 ، 2 ، 3 ، 4 ، 5} // باستخدام وظيفة جعل sliceofstrings: = make ([] string ، 5) // شريحة من 5 سلاسل ، كل منها
// Using a literal
numbers := []int{1, 2, 3, 4, 5}

// Using the make function
sliceOfStrings := make([]string, 5) // a slice of 5 strings, each 
تهيئته إلى سلسلة فارغة

مع Make ، فأنت تخبر Go لإنشاء شريحة بطول معين ولكنها مدعومة بمجموعة تديرها لك. لذلك لا داعي للقلق بشأن تفاصيل تخصيص الذاكرة. ؟

الطول والقدرة؟

مفهومين حاسمان في الشرائح هما الطول والقدرة. الطول هو عدد العناصر الموجودة حاليًا في الشريحة ، في حين أن السعة هي العدد الإجمالي للعناصر التي يمكن أن تحتفظ بها قبل أن تحتاج إلى تغيير حجمها.


الأرقام: = [] int {1 ، 2 ، 3} fmt.println (Len (Number)) // 3 fmt.println (CAP (أرقام)) // 3 (نفس الطول هنا)
// Using a literal
numbers := []int{1, 2, 3, 4, 5}

// Using the make function
sliceOfStrings := make([]string, 5) // a slice of 5 strings, each 
عندما تبدأ عناصر الإلحاق ، ستضاعف GO ضعف السعة كلما تمتلئ ، لذلك لا داعي للقلق بشأن ضرب السقف.


أرقام = إلحاق (أرقام ، 4) fmt.println (Len (Number)) // 4 fmt.println (CAP (أرقام)) // ربما 6 الآن ، اعتمادًا على نمو GO
// Using a literal
numbers := []int{1, 2, 3, 4, 5}

// Using the make function
sliceOfStrings := make([]string, 5) // a slice of 5 strings, each 
نمط

إلحاق بالشرائح: سحر GO المدمج؟ ✨
يعد إضافة عناصر إلى شريحة سهلة مثل PIE مع وظيفة إلحاق GO. يمكنك إضافة عنصر واحد أو أكثر في وقت واحد ، وسيقوم GO بالتعامل مع جميع الأشياء المقيدة والذاكرة لك.

الأرقام: = [] int {1 ، 2 ، 3} الأرقام = إلحاق (الأرقام ، 4 ، 5 ، 6) // إضافة عناصر متعددة في وقت واحد fmt.println (الأرقام) // [1 2 3 4 5 6]
// Using a literal
numbers := []int{1, 2, 3, 4, 5}

// Using the make function
sliceOfStrings := make([]string, 5) // a slice of 5 strings, each 
هذه الميزة ذات التقييم التلقائي تجعل الشرائح مفيدة للغاية ، خاصة إذا كنت لا تعرف حجم قائمتك.

تقطيع شريحة ؟؟

التقطيع في GO هي في الواقع حيث تصبح الأمور ممتعة حقًا. يمكنك إنشاء "شريحة فرعية" لشريحة موجودة دون نسخ العناصر.


الأرقام: = [] int {10 ، 20 ، 30 ، 40 ، 50} sublice: = الأرقام [1: 4] // فقط تأخذ "شريحة" من الشريحة الأصلية fmt.println (sublice) // [20 30 40]
// Using a literal
numbers := []int{1, 2, 3, 4, 5}

// Using the make function
sliceOfStrings := make([]string, 5) // a slice of 5 strings, each 
في الأرقام [1: 4] ، فهرس الأول (1) شامل ، والفهرس الأخير (4) حصري. ينتهي بك الأمر بالعناصر في المواضع 1 و 2 و 3 ، ولكن ليس 4.

لا يزال هذا الشريحة الفرعية يشترك في نفس الصفيف الأساسي مع الشريحة الأصلية ، لذلك ستؤثر التغييرات على واحدة على الآخر:


sublice [0] = 25 fmt.println (الأرقام) // [10 25 30 40 50] fmt.println (sublice) // [25 30 40]
// Using a literal
numbers := []int{1, 2, 3, 4, 5}

// Using the make function
sliceOfStrings := make([]string, 5) // a slice of 5 strings, each 
لتجنب أي تغييرات غير مقصودة ، يمكنك استخدام النسخ لإنشاء نسخة مستقلة من الشريحة:


newslice: = make ([] int ، len (sublice)) نسخة (NewsLice ، sublice)
// Using a literal
numbers := []int{1, 2, 3, 4, 5}

// Using the make function
sliceOfStrings := make([]string, 5) // a slice of 5 strings, each 
تغيير السعة مع إلحاق؟

إذا كنت بحاجة إلى شريحة أكبر من قدرتها الحالية ، فسيقوم الإلحاح تلقائيًا بإنشاء مجموعة جديدة أكبر في الخلفية ونسخ كل شيء. هذا فعال بشكل لا يصدق وجزء كبير مما يجعل الشرائح رائعة. عندما ينشئ Append صفيفًا جديدًا ، فإنه يخصص السعة السابقة - مما يمنحك مجالًا للنمو!

التقطيع وكفاءة الذاكرة؟

إليك سرًا قليلاً: في حين أن التقطيع قوي للغاية ، فقد يؤدي في بعض الأحيان إلى تسرب الذاكرة إذا لم تكن حذراً. نظرًا لأن الشرائح تشير إلى نفس الصفيف الأساسي ، فقد تبقى الصفيف في الذاكرة حتى لو كنت تستخدم جزءًا صغيرًا منه فقط.

على سبيل المثال:


BigSlice: = make ([] int ، 1_000_000) // شريحة كبيرة مع الكثير من العناصر Smallslice: = BigSlice [: 10] // شريحة صغيرة منه // الآن يستخدم `smallslice" 10 عناصر فقط ، ولكن الصفيف الأساسي مع // 1،000،000 عنصر لا يزال في الذاكرة! ؟
// Using a literal
numbers := []int{1, 2, 3, 4, 5}

// Using the make function
sliceOfStrings := make([]string, 5) // a slice of 5 strings, each 
في مثل هذه الحالات ، من الأفضل استخدام نسخة لإنشاء شريحة مستقلة حقًا تحتوي فقط على البيانات التي تحتاجها ، وتحرير بقية الذاكرة.


minislice: = make ([] int ، len (smallslice)) نسخة (minislice ، smallslice) // الآن `minislice` منفصلة تماما!
// Using a literal
numbers := []int{1, 2, 3, 4, 5}

// Using the make function
sliceOfStrings := make([]string, 5) // a slice of 5 strings, each 
شرائح متعددة الأبعاد ؟؟

تحتاج أكثر من بعد واحد؟ يمكنك إنشاء شرائح متعددة الأبعاد أيضًا! يمكن أن يكون هذا مفيدًا لأشياء مثل الشبكات أو الجداول. فقط أعلن شريحة من الشرائح:


Matrix: = [] [] int { {1 ، 2 ، 3} ، {4 ، 5 ، 6} ، {7 ، 8 ، 9} ، } fmt.println (المصفوفة) // [[1 2 3] [4 5 6] [7 8 9]]
// Using a literal
numbers := []int{1, 2, 3, 4, 5}

// Using the make function
sliceOfStrings := make([]string, 5) // a slice of 5 strings, each 
كل "صف" عبارة عن شريحة في حد ذاتها ، حتى تتمكن من زراعتها بشكل مستقل إذا لزم الأمر.


مصفوفة [0] = إلحاق (مصفوفة [0] ، 10) fmt.println (المصفوفة) // [[1 2 3 10] [4 5 6] [7 8 9]]
// Using a literal
numbers := []int{1, 2, 3, 4, 5}

// Using the make function
sliceOfStrings := make([]string, 5) // a slice of 5 strings, each 
شريحة لا شيء؟

شريحة لا شيء هي ببساطة شريحة لم تتم تهيئتها بعد. إنه ذو طول وقدرة صفر ولكن لا يزال من الممكن استخدامه مع وظائف مثل الإلحاح دون الذعر.


var nilslice [] int // أعلن ، ولكن لم يتم تهيئته fmt.println (Len (Nilslice)) // 0 fmt.println (CAP (Nilslice)) // 0
// Using a literal
numbers := []int{1, 2, 3, 4, 5}

// Using the make function
sliceOfStrings := make([]string, 5) // a slice of 5 strings, each 
عندما تقوم بإلحاق شريحة بالارتباك ، اذهب فقط تهيئتها لك تلقائيًا. إنها خدعة أنيقة أن ترفع جعبتك.

المزالق وأفضل الممارسات؟

راقب الذاكرة المشتركة: تذكر ، تشارك الشرائح الذاكرة مع الصفيف الأصلي. هذا أمر رائع للأداء ، ولكن كن حذرًا عند تقطيع أجزاء من صفيف كبير لتجنب الحفاظ على البيانات غير الضرورية في الذاكرة.

احذر من تغيير حجمه: عند الإلحاق ، قد تحتاج GO إلى إنشاء صفيف أساسي جديد إذا كانت السعة الحالية ممتلئة. يمكن أن يكون هذا أكثر كفاءة من القيام بالعديد من التغييرات الصغيرة ، ولكن كن على دراية بالنفقات العامة إذا كنت تتعامل مع مجموعات البيانات الكبيرة.

تجنب التحسين السابق لأوانه: GO تعالج الكثير من تخصيص الذاكرة وتغيير حجمها تلقائيًا باستخدام الشرائح. في كثير من الأحيان ، يمكن أن تنتهي محاولة تشغيل هذه التفاصيل إلى جعل الكود أكثر فوضى وأقل كفاءة. ثقة ميكانيكا شريحة GO للقيام بالشيء الصحيح في معظم الحالات.

بيان الافراج تتم إعادة طباعة هذه المقالة على: https://dev.to/learngo/slices-the-backbone-of-go-21ig؟1 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] لحذفه.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3