پرش به مطلب اصلی

Pointer

اشاره‌گر در واقع متغیری است که، آدرس حافظه یک مقدار را نگه می‌دارد.

1var ex *T

در بین برنامه نویسان زبان Go همیشه این مسئله بوده که کی و کجا باید از Pointer استفاده کنیم؟!

زمانی باید از Pointer استفاده کنید که قصد دارید یک متغیری را در scope ها و توابع مختلف مقدار دهی کنید در اینجا بهتر است از Pointer استفاده کنیم تا جلو کپی شدن متغیر در خانه های مختلف حافظه گرفته شود.

ساده تر بهش بخواهیم نگاه کنیم وقتی حس کردی میخوای یک متغیر را در چند جای مختلف خارج از اونجایی که تعریف شده مقدار دهی کنی بهتر است آن متغیر را بصورت Pointer برای مقدار دهی پاس دهید.

حتی این قضیه برای اینکه method تعریف کنیم صدق میکنه که چرا باید متد با Pointer یا بدون Pointer تعریف کنیم.

نکته مهم: استفاده از Pointer باید با دقت انجام شود تا از مشکلاتی مانند دسترسی همزمان به متغیرها و اشتباهات مرتبط با حافظه جلوگیری شود.


در تعریف اشاره‌گر ‌ها, ما ۲ تا اپراتور داریم که کارکرد هر کدام از این اپراتورها رو در ادامه توضیح میدم:

  • & بهش میگن ampersand با استفاده از این می‌توانیم آدرس حافظه متغیر فرضا x را به متغیر دیگری بدهیم (y := &x)
  • * بهش میگن asterisk با استفاده از این می‌توانیم به مقدار داخل حافظه متغیر فرضا x دسترسی پیدا کنیم (x*)

پوینتر همان رفرنس نیست

  • پوینتر (Pointer) → آدرس حافظه را نگه می‌دارد.
  • در زبان Go، یک پوینتر مستقیماً به یک آدرس حافظه اشاره می‌کند و می‌توان مقدار درون آن آدرس را تغییر داد.
  • رفرنس (Reference) → یک نام مستعار برای مقدار است.