17.آموزش GO با مثال(اشاره گرها)

گو از اشاره گرها پشتیبانی میکند, اجازه میده تا ارجاعات رو به مقادیر و رکوردها درون برنامتون بدید.

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

<<بازگشتی-------------------------------------سازه ها>>