مقدمه ای برای 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 قوی و مقیاس پذیر کمک می کند.