Junior
Go tilida interfeyslar nima?
sobes.tech AI
AIdan javob
Go'da interfeys metod imzolarining to'plamidir. U ob'ektning xulq-atvorini belgilaydi: "nima qila oladi". Interfeys ma'lumotlar yoki metodlarning amalga oshirilishini o'z ichiga olmaydi.
Asosiy xususiyatlar:
- Nisbiy amalga oshirish: Bir tur, agar u interfeysda e'lon qilingan barcha metodlarni taqdim etsa, nisbatan amalga oshiradi. Turning interfeysni amalga oshirayotganligini aniq e'lon qilish shart emas.
- "O'rdak tipizatsiyasi" (Duck Typing): "Agar u o'rdak kabi quvquq qilsa va yuradigan bo'lsa, u o'rdak". Go'da, ob'ektning turi muhim emas, balki u talab qilingan metodlar to'plamini amalga oshiradimi.
- Nol qiymat: Interfeysning nol qiymati
nil. Interfeysning qiymatinilbo'lishi mumkin, agar turi va qiymati ichidanilbo'lsa. - Bo'sh interfeys (
interface{}yokiany): Har qanday turdagi qiymatni saqlay oladi. Ko'pincha, noma'lum turdagi ma'lumotlar bilan ishlash yoki umumiy konteynerlarda ishlatiladi.
Taqdimoti va foydalanish misoli:
// Greeter interfeysini aniqlaymiz
type Greeter interface {
Greet() string // Greet metod, satr qaytaradi
}
// Person turini aniqlaymiz
type Person struct {
Name string
}
// Person, Greet metodini taqdim etib, Greeter interfeysini amalga oshiradi
func (p Person) Greet() string {
return "Salom, " + p.Name
}
// Robot turini aniqlaymiz
type Robot struct {
Model string
}
// Robot ham Greeter interfeysini amalga oshiradi
func (r Robot) Greet() string {
return "Salom, model " + r.Model
}
// Funksiya, Greeter interfeysini qabul qiladi
func SayHello(g Greeter) {
fmt.Println(g.Greet()) // Greet metodini interfeys orqali chaqirish
}
func main() {
person := Person{Name: "Alicia"}
robot := Robot{Model: "RX-800"}
SayHello(person) // Greeterni amalga oshirgan Personni uzatish
SayHello(robot) // Greeterni amalga oshirgan Robotni uzatish
}
Interfeyslar moslashuvchan va bog'lanmagan dizaynni rag'batlantiradi, turli ma'lumot turlari bilan ishlash uchun funksiyalar yozishga imkon beradi, shart emas, bu turlar kerakli interfeysni amalga oshiradimi. Ular umumiy kod yaratish va Go standart kutubxonasida (masalan, io.Reader, io.Writer, fmt.Stringer) ishlatiladi.