GoDasturchi
Empty Interface: Working with Any Type

Empty Interface: Working with Any Type

Bo'sh interfeys: har qanday tur bilan ishlash

Interfeys — metodlar to'plami. Xo'sh, agar to'plam bo'sh bo'lsa-chi? Hech qanday metod talab qilinmasa, mutlaqo har qanday tur unga mos keladi. Go'da bu maxsus nomga ega: any (eski kodlarda interface{} ko'rinishida ham uchraydi — ikkalasi ham xuddi bir xil narsa).

example.go
var x any
x = 42
x = "salom"
x = 3.14
x = []int{1, 2, 3}
// hammasi joiz — any hech narsa talab qilmaydi

Bu — YAML Data Pipeline kursidagi map[string]stringga o'xshaydi, lekin yanada umumiyroq: map[string]string faqat matnni saqlaydi, any esa mutlaqo har qanday qiymatni saqlashi mumkin. Kelib chiqadigan narx: siz qiymat qanday turga ega ekanini bevosita bila olmaysiz — buni tekshirish uchun alohida vosita kerak (%T formatlash og'ini yoki keyingi darsda ko'radigan type assertion).

example.go
fmt.Printf("%v (%T)\n", x, x)
// chiqishi: [1 2 3] ([]int)

>_ Exercise

DescribeAll(items []any) []string funksiyasini yozing. U har bir elementni fmt.Sprintf("%v (%T)", item, item) yordamida "qiymat (Tur)" ko'rinishidagi matnga aylantirib, natijalar slice'ini qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

any — metodlari yo'q interfeys, shuning uchun mutlaqo har qanday qiymat unga mos keladi. Bu moslashuvchanlik beradi, lekin narxi bor: qiymat ichida qanday tur yashiringanini bilish uchun maxsus vositalar (%T, type assertion) kerak bo'ladi.

NEXT UP

Type Assertions: Safe Value Extraction

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Empty Interface: Working with Any Type

Bo'sh interfeys: har qanday tur bilan ishlash

Interfeys — metodlar to'plami. Xo'sh, agar to'plam bo'sh bo'lsa-chi? Hech qanday metod talab qilinmasa, mutlaqo har qanday tur unga mos keladi. Go'da bu maxsus nomga ega: any (eski kodlarda interface{} ko'rinishida ham uchraydi — ikkalasi ham xuddi bir xil narsa).

example.go
var x any
x = 42
x = "salom"
x = 3.14
x = []int{1, 2, 3}
// hammasi joiz — any hech narsa talab qilmaydi

Bu — YAML Data Pipeline kursidagi map[string]stringga o'xshaydi, lekin yanada umumiyroq: map[string]string faqat matnni saqlaydi, any esa mutlaqo har qanday qiymatni saqlashi mumkin. Kelib chiqadigan narx: siz qiymat qanday turga ega ekanini bevosita bila olmaysiz — buni tekshirish uchun alohida vosita kerak (%T formatlash og'ini yoki keyingi darsda ko'radigan type assertion).

example.go
fmt.Printf("%v (%T)\n", x, x)
// chiqishi: [1 2 3] ([]int)

>_ Exercise

DescribeAll(items []any) []string funksiyasini yozing. U har bir elementni fmt.Sprintf("%v (%T)", item, item) yordamida "qiymat (Tur)" ko'rinishidagi matnga aylantirib, natijalar slice'ini qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

any — metodlari yo'q interfeys, shuning uchun mutlaqo har qanday qiymat unga mos keladi. Bu moslashuvchanlik beradi, lekin narxi bor: qiymat ichida qanday tur yashiringanini bilish uchun maxsus vositalar (%T, type assertion) kerak bo'ladi.

NEXT UP

Type Assertions: Safe Value Extraction