Strukturaga ko'rsatkichlar
Go dasturlash tilida oddiy o'zgaruvchilar kabi tuzilmalarga (struct) ham ko'rsatkichlar yaratish mumkin. Bu orqali katta hajmli obyektlarning nusxasini yaratmasdan, ularning asl maydonlarini bevosita o'zgartirish imkoni paydo bo'ladi.
Faraz qilaylik, bizda Person strukturasi mavjud:
type Person struct {
name string
age int
}
Ushbu strukturadan nusxa olib, uning xotira manzilini ko'rsatkich o'zgaruvchisiga o'zlashtirishimiz mumkin:
package main
import "fmt"
type Person struct {
name string
age int
}
func main() {
// Struktura nusxasi
person1 := Person{"Ali", 25}
// person1 manzilini saqlovchi ko'rsatkich
var ptr *Person
ptr = &person1
fmt.Println("person1:", person1)
fmt.Println("ptr:", ptr)
}
Natija:
person1: {Ali 25}
ptr: &{Ali 25}
[!TIP] Ko'rsatkichni qisqartirilgan shaklda yaratish juda qulay:
example.goptr := &person1
C yoki C++ tillarida ko'rsatkich orqali maydonga kirish uchun -> yoki (*ptr).field yozish talab etiladi. Biroq Go dasturlash tilida sintaksis ancha soddalashtirilgan: to'g'ridan-to'g'ri nuqta . operatori orqali murojaat qilish mumkin (Go buni avtomatik dereferensiya qiladi):
package main
import "fmt"
type Person struct {
name string
age int
}
func main() {
person := Person{"Ali", 25}
ptr := &person
// To'g'ridan-to'g'ri nuqta orqali maydonlarni o'qiymiz
fmt.Println("Ismi:", ptr.name)
fmt.Println("Yoshi:", ptr.age)
// Bu (*ptr).name bilan aynan bir xil
fmt.Println("Ismi (*ptr bilan):", (*ptr).name)
}
Natija:
Ismi: Ali
Yoshi: 25
Ismi (*ptr bilan): Ali
Ko'rsatkich yordamida strukturaning asl ma'lumotlarini to'g'ridan-to'g'ri o'zgartirish mumkin:
package main
import "fmt"
type Weather struct {
city string
temperature int
}
func main() {
weather := Weather{"Toshkent", 20}
fmt.Println("Boshlang'ich ob-havo:", weather)
// Strukturaga ko'rsatkich olamiz
ptr := &weather
// Ko'rsatkich orqali temperaturani o'zgartiramiz
ptr.temperature = 25
fmt.Println("Yangilangan ob-havo:", weather)
}
Natija:
Boshlang'ich ob-havo: {Toshkent 20}
Yangilangan ob-havo: {Toshkent 25}
ptr.temperature = 25 amali bajarilganda weather obyektining temperature maydoni bevosita o'zgardi.