اگر مدتی است که در حال نوشتن کد Go هستید، احتمالاً با آن برخورد کرده اید range
حلقه ها آنها برای تکرار بر روی برش ها، نقشه ها و کانال ها ظریف، مختصر و فوق العاده مفید هستند. اما آیا میدانستید که رفتار آنها گاهی اوقات میتواند خلاف واقع باشد و منجر به اشکالات ظریفی در کد شما شود؟
در این مقاله، مکانیک آن را شرح می دهم range
حلقه ها، توضیح دهید که چرا این خصیصه ها رخ می دهند، و نکات قابل اجرا برای جلوگیری از دام های رایج را به اشتراک بگذارید. در پایان، درک عمیق تری از Go خواهید داشت و برای نوشتن کد مطمئن و بدون اشکال مجهزتر خواهید شد. 🚀
چه چیزی را می سازد Range
حلقه روی حیله و تزویر؟
در نگاه اول، range
حلقه ها در Go ساده به نظر می رسند. در اینجا مثالی است که احتمالاً دیده اید:
codenumbers := []int{1, 2, 3, 4, 5}
for index, value := range numbers {
fmt.Printf("Index: %d, Value: %d\n", index, value)
}
این شاخص و مقدار هر عنصر در برش را چاپ می کند. ساده است، درست است؟ اما اینجا جایی است که همه چیز جالب می شود (و به طور بالقوه خسته کننده).
مکانیک زیربنایی از Range
وقتی استفاده می کنید range
، Go یک کپی از مقداری که روی آن تکرار می کنید ایجاد می کند. برای برش ها، این بدان معنی است که شما مستقیماً به عناصر دسترسی ندارید، اما با کپی های آنها کار می کنید. این جزئیات ظریف می تواند منجر به رفتار غیرمنتظره شود.
این مثال را در نظر بگیرید:
codewords :=...