Sobes.tech
Middle

Неге Go'догу боштонду интерфейс кез келген түргө айлантылат?

sobes.tech AI

AIден жооп

Бос интерфейс interface{} ыкметтерди камтыбайт. Goда ар кандай түр, ыкметтерди талап кылбаган интерфейсти аткара алат. Ошондуктан, ар кандай түрдүн мааниси interface{} түрүндөгү өзгөрмөгө берилет же interface{} кабыл алган функцияга өткөрүлөт. Негизинен, interface{} ар кандай түрдүн мааниси үчүн контейнер болуп, ал маанини жана анын түрүн сактайт.

package main

import "fmt"

func main() {
	var i interface{} // Бос интерфейс өзгөрмөсүн жарыялайбыз

	i = 42            // int маанисин берүү
	fmt.Printf("Мән: %v, Төрү: %T\n", i, i)

	i = "салам"     // string маанисин берүү
	fmt.Printf("Мән: %v, Төрү: %T\n", i, i)

	i = true        // bool маанисин берүү
	fmt.Printf("Мән: %v, Төрү: %T\n", i, i)

	i = struct{}{}  // бош структураны берүү
	fmt.Printf("Мән: %v, Төрү: %T\n", i, i)
}

interface{}-тен конкреттүү түргө өткөрүү үчүн тип тастыктоо (type assertion) же типти алмаштыруу (type switch) колдонулат.

package main

import "fmt"

func main() {
	var i interface{} = " дүйнө"

	// Типти тастыктоо
	s, ok := i.(string) // маанинин string экенин текшерүү
	if ok {
		fmt.Println("Типти тастыктоо ийгиликтүү:", s)
	} else {
		fmt.Println("Типти тастыктоо ийгиликсиз")
}

	// Типти алмаштыруу
	switch v := i.(type) {
	case int:
		fmt.Println("Тип: int, мааниси:", v)
	case string:
		fmt.Println("Тип: string, мааниси:", v)
	default:
		fmt.Println("Белгисиз түр")
	}
}