Bo'sh interfeys
Go dasturlash tilida ichida hech qanday metod ko'rsatilmagan interfeys bo'sh interfeys (empty interface) deyiladi:
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 sifatidaanykalit so'zi kiritildi (type any = interface{}).
Bo'sh interfeys turidagi o'zgaruvchiga har qanday turdagi qiymatni o'zlashtirish mumkin:
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:
Boshlang'ich qiymat: <nil>
String: Salom Go
Int: 100
Funksiya parametriga interface{} turini bersak, ushbu funksiyaga istalgan turdagi ma'lumotni uzatish mumkin:
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:
Go Dasturchi
20
false
Mashhur fmt.Println() funksiyasi ham aynan shu prinsip asosida ishlaydi, shuning uchun unga istalgan turdagi ma'lumotlarni bemalol bera olamiz.
Bo'sh interfeysni ... (variadic) bilan birgalikda ishlatib, istalgancha miqdordagi va turli xil turdagi argumentlarni qabul qilish mumkin:
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:
[Go Dasturchi]
[Go Dasturchi 20]
[Go Dasturchi 20 false]