برنامه نویسی

تسلط بر نشانگرها در Go: یک راهنمای کامل مبتدی به پیشرفت

به (بزرگ شدن) یک زبان قدرتمند و استاتیک تایپ شده است که برای سادگی ، عملکرد و مقیاس پذیری ساخته شده است. یکی از مهمترین ویژگی هایی که از بسیاری از زبانهای سطح بالا جدا می شود ، پشتیبانی از آن است نشانگرها، که به شما امکان می دهد آدرس های حافظه را مستقیماً ارجاع دهید.

در این وبلاگ ، هر آنچه را که باید در مورد نشانگرها در Go بدانید-از آنچه هستند و به همین دلیل مهم هستند ، می آموزید تا نحوه استفاده از آنها در برنامه های دنیای واقعی استفاده کنید.


📌 نشانگر چیست؟

بوها اشاره کننده متغیری است که دارای آدرس حافظه از متغیر دیگر

👉 قیاس:

به عنوان یک خانه و ارزش آن به عنوان شخصی که در داخل زندگی می کند ، به یک متغیر فکر کنید. یک اشاره گر مانند خانه است خطاب نوشته شده بر روی یک یادداشت شما شخص را حمل نمی کنید – آدرس را حمل می کنید.


syntax اشاره گر اصلی در GO

var x int = 10
var p *int = &x
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • x است int متغیر
  • &x می دهد آدرس حافظه از xبشر
  • p است اشاره گر به int (*int) آن آدرس را ذخیره می کند.

referencencing

به مقدار را دریافت کنید ذخیره شده در آدرس نشانگر:

fmt.Println(*p) // Output: 10
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


⚙ چرا از نشانگرها استفاده می کنید؟

  • 🔁 از کپی کردن مقادیر بزرگ خودداری کنید (سود عملکرد).
  • 🧠 مقادیر را تغییر دهید توابع داخل
  • با ساختار داده های پویا کار کنید (مانند لیست های مرتبط ، درختان).
  • 🚀 حالت بین توابع یا گوروتین ها را به اشتراک بگذارید.

🧑‍💻 مثال: مقدار را از طریق نشانگر تغییر دهید

func update(val *int) {
    *val = 99
}

func main() {
    num := 50
    update(&num)
    fmt.Println(num) // Output: 99
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

*val = 99 اصلی را تغییر می دهد num از آنجا که ما با آدرس حافظه آن کار می کنیم.


🆚 ارزش در مقابل نشانگر

نشان مقدار (کپی) اشاره گر (مرجع)
استفاده از حافظه بیشتر (مقدار کپی) کمتر (آدرس کپی)
اصلاح اصلی؟ ❌ نه ✅ بله
عمل کندتر با داده های بزرگ سریعتر

🆕 new() کلمه کلیدی

ptr := new(int)
*ptr = 77
fmt.Println(*ptr) // Output: 77
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • new(int) حافظه را برای یک int و یک اشاره گر به آن برمی گردد.
  • مقدار پیش فرض اشاره گر صفر است.

👤 نشانگرهایی با ساختار

type User struct {
    Name string
}

func rename(u *User) {
    u.Name = "Alice"
}

func main() {
    user := User{Name: "Bob"}
    rename(&user)
    fmt.Println(user.Name) // Output: Alice
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

✅ اصلاحات در داخل عملکرد در خارج باقی مانده است زیرا ما یک نشانگر را پشت سر می گذاریم.


🧠 مشکلات رایج

  1. در حال ثبت نام یک اشاره گر صفر
   var p *int
   fmt.Println(*p) // panic: runtime error: invalid memory address
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  1. ✅ همیشه بررسی کنید nil:
   if p != nil {
       fmt.Println(*p)
   }
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید


🔄 عبور با مقدار در مقابل نشانگر (recap)

مورد از اشاره گر استفاده می کنید؟
داده های اصلی را تغییر دهید ✅ بله
از ساختارهای بزرگ عبور کنید ✅ بله
مقادیر کوچک فقط خواندنی ❌ نه

🔚 نتیجه گیری

نشانگرها یک هستند مفهوم اصلی در Go That Ollock عملبا کنترل کردنوت انعطاف پذیریبشر با تسلط بر نشانگرها ، شما درک عمیق تری از چگونگی کار کردن داده ها و حافظه در زیر کاپوت کسب می کنید – مهارت های مهم برای هر توسعه دهنده جدی GO.

به یاد داشته باشید: با قدرت عالی (نشانگرها) مسئولیت بزرگی (ایمنی حافظه) به وجود می آید!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا