برنامه نویسی

مقدمه ای برای GO: متغیرها ، نشانگرها ، تخصیص حافظه و تکالیف

من ولید هستم ، یک توسعه دهنده باطن که در حال حاضر یاد می گیرد با نوشتن درباره آن در طول مسیر ، سفر من را به اشتراک می گذارد و به اشتراک می گذارد.

Go (Golang) یک زبان برنامه نویسی تالیف شده و تالیف شده است که برای کارآیی ، مقیاس پذیری و سادگی طراحی شده است. درک متغیرها ، نشانگرها ، تخصیص حافظه و عملیات واگذاری برای نوشتن برنامه های موثر GO بسیار مهم است. در این مقاله ، ما این مفاهیم اساسی را به عمق پوشش خواهیم داد.

متغیرهای GO

یک متغیر در GO یک مکان ذخیره سازی نامگذاری شده است که دارای یک نوع خاص است. GO تایپ استاتیک را اعمال می کند ، به این معنی که هر متغیر دارای یک نوع ثابت است که در زمان کامپایل تعیین می شود.

اعلام متغیرها

GO روش های مختلفی برای اعلام متغیرها فراهم می کند:

با استفاده از var کلمه کلیدی

var x int // Declaration without initialization, defaults to zero value (0)
var name string = "GoLang" // Explicit type declaration with initialization
حالت تمام صفحه را وارد کنید

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

اعلامیه متغیر کوتاه (:=)

count := 42 // Implicit type inference; `count` is inferred as `int`
message := "Hello, Go!" // `message` is inferred as `string`
حالت تمام صفحه را وارد کنید

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

توجه: := اپراتور فقط در توابع موجود است و در سطح بسته قابل استفاده نیست.

اعلامیه های متغیر چندگانه

var a, b int = 10, 20
x, y := 1.5, "tuple assignment"
حالت تمام صفحه را وارد کنید

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

نشانگرها در GO

یک اشاره گر متغیری است که آدرس حافظه متغیر دیگر را ذخیره می کند. نشانگرها امکان دستکاری حافظه مستقیم را فراهم می کنند و می توان برای عبور از استدلال عملکرد کارآمد استفاده کرد.

اعلام نشانگرها

var ptr *int // Declares a pointer to an int, initially nil
حالت تمام صفحه را وارد کنید

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

اختصاص دادن یک اشاره گر

x := 10
ptr := &x // `ptr` now holds the address of `x`
fmt.Println(ptr)  // Outputs memory address
fmt.Println(*ptr) // Dereferencing the pointer (outputs 10)
حالت تمام صفحه را وارد کنید

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

تغییر ارزش از طریق نشانگرها

*ptr = 20 // Changes `x` value to 20
fmt.Println(x) // Outputs 20
حالت تمام صفحه را وارد کنید

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

مقایسه نشانگرها در GO و C

نشانگرهای Go شبیه به C هستند اما با تفاوت های مهم:

  • بدون حسابی نشانگر: برخلاف C ، GO اجازه نمی دهد حسابی نشانگر (به عنوان مثال ، ptr++ نامعتبر است)
  • مجموعه زباله ها: GO یک جمع کننده زباله اتوماتیک دارد ، در حالی که C به مدیریت حافظه دستی نیاز دارد (malloc وت free).
  • مدیریت حافظه ایمن تر: در GO ، نشانگرهای آویزان کمتر متداول هستند زیرا حافظه به طور خودکار مدیریت می شود ، در حالی که در C ، مدیریت نادرست حافظه می تواند باعث نشت حافظه و گسل های تقسیم شود.
  • نیل در مقابل NULL: در GO ، نشانگرهای غیرقانونی به طور پیش فرض nil، در حالی که در C ، معادل آن است NULLبشر

مثال در C:

#include 
#include 

int main() {
    int *p = (int*)malloc(sizeof(int));
    *p = 10;
    printf("%d", *p);
    free(p); // Must manually free memory
    return 0;
}
حالت تمام صفحه را وارد کنید

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

معادل در GO:

package main
import "fmt"

func main() {
    p := new(int)
    *p = 10
    fmt.Println(*p) // Memory is managed by Go's garbage collector
}
حالت تمام صفحه را وارد کنید

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

تخصیص حافظه: new() وت make()

GO دو عملکرد برای تخصیص حافظه فراهم می کند: new() وت make()، هر یک از اهداف مختلف.

با استفاده از new()

new() حافظه را برای یک نوع اختصاص می دهد اما آن را فراتر از مقادیر صفر قرار نمی دهد.

p := new(int) // Allocates memory for an int and returns a pointer
fmt.Println(*p) // Prints zero value (0)
حالت تمام صفحه را وارد کنید

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

با استفاده از make()

make() برای برش ها ، نقشه ها و کانال ها استفاده می شود و آنها را به درستی اولیه می کند.

s := make([]int, 5) // Allocates and initializes a slice of length 5
fmt.Println(s) // Outputs [0 0 0 0 0]
حالت تمام صفحه را وارد کنید

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

طول عمر متغیرها

در GO ، طول عمر متغیر با دامنه آن تعیین می شود:

  • متغیرهای جهانی: در طول اجرای برنامه زندگی کنید.
  • متغیرهای محلی: فقط در عملکردی که آنها اعلام شده اند وجود داشته باشد.
  • متغیرهای اختصاص یافته: توسط جمع کننده زباله GO مدیریت شد.

تکالیف و تکالیف Tuple

تکلیف در GO از یک نحو ساده پیروی می کند اما ویژگی های جالبی دارد.

تکلیف ساده

x := 10
x = 20 // Reassigning x to 20
حالت تمام صفحه را وارد کنید

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

تکلیف Tuple

تکالیف Tuple اجازه می دهد تا مقادیر مبادله ای را بدون متغیر موقتی انجام دهند.

a, b := 5, 10
a, b = b, a // Swaps values of a and b
fmt.Println(a, b) // Outputs 10, 5
حالت تمام صفحه را وارد کنید

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

پایان

درک متغیرها ، نشانگرها ، تخصیص حافظه و تکالیف در Go اساسی است. این مفاهیم پایه و اساس کاملی برای همکاری با مدل حافظه GO ، بهینه سازی عملکرد و نوشتن کد کارآمد ارائه می دهند. در مقایسه با C ، سیستم نشانگر Go به دلیل جمع آوری زباله و عملیات اشاره گر محدود ، ایمن تر و قابل کنترل تر است. تسلط بر این مفاهیم به شما در توسعه برنامه های GO قوی و مقیاس پذیر کمک می کند.

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

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

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

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