31 / 68

Empty Interface

Bo'sh interfeys

Go dasturlash tilida ichida hech qanday metod ko'rsatilmagan interfeys bo'sh interfeys (empty interface) deyiladi:

example.go
interface{}

Go tilida har qanday ma'lumot turi (kamida nolta metodga ega bo'lgani uchun) bo'sh interfeysni avtomatik ravishda qanoatlantiradi. Ya'ni, bo'sh interfeys o'zida istalgan turdagi (int, string, bool, struct, massiv va h.k.) qiymatni saqlashi mumkin.

[!NOTE] Go 1.18 versiyasidan boshlab interface{} ning qisqartmasi sifatida any kalit so'zi kiritildi (type any = interface{}).


1. Bo'sh interfeys turidagi o'zgaruvchi

Bo'sh interfeys turidagi o'zgaruvchiga har qanday turdagi qiymatni o'zlashtirish mumkin:

example.go
package main

import "fmt"

func main() {
    // Bo'sh interfeys o'zgaruvchisi
    var a interface{}

    fmt.Println("Boshlang'ich qiymat:", a) // <nil>

    // String saqlaymiz
    a = "Salom Go"
    fmt.Println("String:", a)

    // Int saqlaymiz
    a = 100
    fmt.Println("Int:", a)
}

Natija:

kod
Boshlang'ich qiymat: <nil>
String: Salom Go
Int: 100

2. Istalgan turdagi argumentni qabul qiluvchi funksiya

Funksiya parametriga interface{} turini bersak, ushbu funksiyaga istalgan turdagi ma'lumotni uzatish mumkin:

example.go
package main

import "fmt"

// Istalgan turdagi qiymatni qabul qiluvchi funksiya
func displayValue(i interface{}) {
    fmt.Println(i)
}

func main() {
    a := "Go Dasturchi"
    b := 20
    c := false

    displayValue(a) // string uzatamiz
    displayValue(b) // butun son uzatamiz
    displayValue(c) // mantiqiy qiymat uzatamiz
}

Natija:

kod
Go Dasturchi
20
false

Mashhur fmt.Println() funksiyasi ham aynan shu prinsip asosida ishlaydi, shuning uchun unga istalgan turdagi ma'lumotlarni bemalol bera olamiz.


3. Istalgan sondagi va istalgan turdagi argumentlarni qabul qilish

Bo'sh interfeysni ... (variadic) bilan birgalikda ishlatib, istalgancha miqdordagi va turli xil turdagi argumentlarni qabul qilish mumkin:

example.go
package main

import "fmt"

// Istalgan sondagi parametrlarni qabul qiladi
func displayValue(i ...interface{}) {
    fmt.Println(i)
}

func main() {
    a := "Go Dasturchi"
    b := 20
    c := false

    // 1 ta argument
    displayValue(a)

    // 2 ta turli xil argument
    displayValue(a, b)

    // 3 ta turli xil argument
    displayValue(a, b, c)
}

Natija:

kod
[Go Dasturchi]
[Go Dasturchi 20]
[Go Dasturchi 20 false]