Sobes.tech
Middle

Nega Go'da bo'sh interfeys har qanday turga aylantirilishi mumkin?

sobes.tech AI

AIdan javob

Bo'sh interfeys interface{} metodlarni o'z ichiga olmaydi. Go'da har qanday tur metodlarni talab qilmaydigan interfeysni qondirishi mumkin. Shuning uchun, har qanday turning qiymati interface{} turidagi o'zgaruvchiga tayinlanishi yoki interface{} qabul qiladigan funktsiyaga uzatilishi mumkin. Aslida, interface{} har qanday turdagi qiymat uchun konteyner bo'lib, u qiymat va uning turini saqlaydi.

package main

import "fmt"

func main() {
	var i interface{} // Bo'sh interfeys o'zgaruvchisini e'lon qilamiz

	i = 42            // int qiymatini tayinlaymiz
	fmt.Printf("Qiymat: %v, Tur: %T\n", i, i)

	i = "salom"     // string qiymatini tayinlaymiz
	fmt.Printf("Qiymat: %v, Tur: %T\n", i, i)

	i = true        // bool qiymatini tayinlaymiz
	fmt.Printf("Qiymat: %v, Tur: %T\n", i, i)

	i = struct{}{}  // bo'sh struktura tayinlaymiz
	fmt.Printf("Qiymat: %v, Tur: %T\n", i, i)
}

interface{} dan aniq turga o'tkazish uchun tip tasdiqlash (type assertion) yoki tip switch ishlatiladi.

package main

import "fmt"

func main() {
	var i interface{} = "dunyo"

	// Tip tasdiqlash
	s, ok := i.(string) // qiymat stringmi yoki yo'qligini tekshiradi
	if ok {
		fmt.Println("Tip tasdiqlash muvaffaqiyatli:", s)
	} else {
		fmt.Println("Tip tasdiqlash muvaffaqiyatsiz")
	}

	// Tip switch
	switch v := i.(type) {
	case int:
		fmt.Println("Tip int, qiymat:", v)
	case string:
		fmt.Println("Tip string, qiymat:", v)
	default:
		fmt.Println("Noma'lum tur")
	}
}