Avatar ·

لماذا لا تنسخ copy() الشريحة في Go؟ أم أنني أفعل شيئًا خاطئًا؟

مرحبًا بالجميع! بدأت مؤخرًا في تعلم Go، وواجهت مشكلة غير مفهومة عند العمل مع الشرائح (slice). كنت بحاجة لتكرار شريحة في أخرى، لتعديل النسخة بشكل مستقل عن الأصل. قرأت أن هناك دالة مدمجة `copy()` لهذا الغرض. كتبت هذا الكود: ```go package main import "fmt" func main() { original := []int{1, 2, 3, 4, 5} var copySlice []int copy(copySlice, original) fmt.Println("original:", original) fmt.Println("copy:", copySlice) } ``` لكن النتيجة كانت شريحة فارغة! `copySlice` بقيت `[]`. كنت أتوقع أنه بعد `copy()` ستحتوي `copySlice` على نفس العناصر الموجودة في `original`. ثم جربت طريقة أخرى — أعلنت أولاً عن شريحة بطول ولكن بدون قيمة: ```go copySlice2 := make([]int, len(original)) copy(copySlice2, original) ``` وهذا نجح! لكن لماذا لم تعمل الطريقة الأولى؟ في التوثيق مكتوب أن `copy` تنسخ العناصر، لكن لا يشرح لماذا لا تعمل الشريحة الفارغة.