Mutate Through a Pointer
Pointer orqali o'zgartirish
Pointer orqali o'qish — bu hikoyaning yarmi. Ikkinchi yarmi — yozish.
timeout := 30
p := &timeout // p timeout manzilini ushlab turadi
*p = 60 // xotiradagi o'sha manzilga 60 ni yozing
fmt.Println(timeout) // 60: timeout ham o'zgardi*pni = chap tomoniga qo'ying va Go pointer orqali yozadi.
O'sha manzildagi qiymat o'zgaradi. Va timeout o'sha yerda yashagani uchun, timeoutning o'zi 30 dan 60ga o'tadi. Uning nomi assignment chap tomonida hech qachon ko'rinmadi, lekin baribir o'zgardi.
Bu ishlaydi, chunki *p va timeout — bir xil xotira, ikkita bog'liq qiymat emas. Pointer int'ning suratini saqlamaydi. U unga yetib borish usulini saqlaydi.
Xuddi shu * ikkala yo'nalishda ham ishlaydi:
| POZITSIYA | NIMA QILADI |
|---|---|
= ning o'ng tomonida *p | manzildagi qiymatni o'qiydi |
= ning chap tomonida *p | manzildagi qiymatni yozadi |
Pointer bergan istalgan narsa, uning nomini hech qachon ko'rmasdan, orqasidagi o'zgaruvchini o'zgartira oladi.
>_ Exercise
Siz maxConnsga p pointerini ushlab turibsiz. Undan foydalanib qiymatni 25ga oshiring.
- •Sizda faqat
pbor,maxConnsning o'zi emas - •Pointer orqali
*p = ...bilan qiymat bering
Kutilgan natija:
25Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
*p = v pointer orqali yozadi va asl o'zgaruvchi ham o'zgaradi, chunki ular bir xil xotirani ulashadi.
NEXT UP
Pointer as Argument
$ go run main.go
Kodingizni ishga tushiring