گو از اشاره گرها پشتیبانی میکند, اجازه میده تا ارجاعات رو به مقادیر و رکوردها درون برنامتون بدید.
package main import "fmt"
اینجا ما نشون میدیم که چگونه اشاره گرها در مقابل مقادیر کار میکنند با دو تابع: zeroval
و zeroptr
zeroval
یک پارامتر int
دارد, بنابراین آرگومان در اینجا ارجاع با مقدار میشود. zeroval
یک کپی از ival
را میگیرد و اون رو از فرم اصلی با ارجاع به تابع متمایز میکند.
func zeroval(ival int) { ival = 0 }
وzeroptr
در مقابل *int
یک پارامتر دارد, به این معنا که یک اشاره گر int
را میگیرد. *iptr
کدی است در بدنه تابع سپس اشاره گر را از آدرس حافظه خود به مقدار درست آن در حافظه برمیگرداند. اختصاص دادن یک مقدار به مقدار بازگردانده شده از ارجاع ،ارزش مقدار رو در آدرس ارجاع داده شده تغییر میدهد.
func zeroptr(iptr *int) { *iptr = 0 } func main() { i := 1 fmt.Println("initial:", i) zeroval(i) fmt.Println("zeroval:", i)
نحو i&
آدرسی از حافظه را به i
،میدهد به عنوان مثال یک اشاره گر به i
.
zeroptr(&i) fmt.Println("zeroptr:", i)
همچنین اشاره گرها میتونن نمایش داده بشن.
fmt.Println("pointer:", &i) }
تابعzeroval
مقدار i
را در main
تغییر نمیدهد، اما zeroptr
این کار را انجام میدهد چون این یک ارجاع به حافظه را برای این متغییر را دارد.
$ go run pointers.go initial: 1 zeroval: 1 zeroptr: 0 pointer: 0x42131100