GoDasturchi
Mutate Through a Pointer

Mutate Through a Pointer

Pointer orqali o'zgartirish

Pointer orqali o'qish — bu hikoyaning yarmi. Ikkinchi yarmi — yozish.

example.go
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:

POZITSIYANIMA QILADI
= ning o'ng tomonida *pmanzildagi qiymatni o'qiydi
= ning chap tomonida *pmanzildagi 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 p bor, maxConnsning o'zi emas
  • Pointer orqali *p = ... bilan qiymat bering

Kutilgan natija:

example.go
25

Stuck? Reveal a hint to help you.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Mutate Through a Pointer

Pointer orqali o'zgartirish

Pointer orqali o'qish — bu hikoyaning yarmi. Ikkinchi yarmi — yozish.

example.go
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:

POZITSIYANIMA QILADI
= ning o'ng tomonida *pmanzildagi qiymatni o'qiydi
= ning chap tomonida *pmanzildagi 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 p bor, maxConnsning o'zi emas
  • Pointer orqali *p = ... bilan qiymat bering

Kutilgan natija:

example.go
25

Stuck? Reveal a hint to help you.

Hints (0/3)

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