Sobes.tech
Middle

Тафовут дар чӣ гуна аст байни интерфейси Go ва интерфейсҳо дар дигар забонҳои барномасозӣ?

sobes.tech AI

Ҷавоб аз AI

Go интерфейсинин негизги айырмасы — алар имплициттүү (жасалма) түрдө ишке ашырылат.

Башка тилдерде (мисалы, Java, C#), класс так аныкталган интерфейсти ишке ашырганын ачык көрсөтүшү керек (ачык ишке ашыруу).

Goда, кандайдыр бир түр автоматтык түрдө бул интерфейсти аткарат, эгер ал аныкталган бардык методдорду ишке ашырса. Анык ишке ашыруу декларациясы талап кылынбайт.

Мисал (Go):

// Интерфейсти аныктоо
type Reader interface {
	Read(p []byte) (n int, err error)
}

// Структураны аныктоо
type FileReader struct {
	// ... талаалар
}

// FileReader үчүн Read методуна ишке ашыруу
func (fr FileReader) Read(p []byte) (n int, err error) {
	// ... окуу логикасы
	return 0, nil // мисал үчүн орун басар
}

// FileReader, Read методу бар болгондуктан, имплициттүү түрдө бул интерфейсти аткарат.

Мисал (Java — салыштыруу үчүн):

// Интерфейсти аныктоо
interface Reader {
    int read(byte[] p);
}

// Класс аныктоо
class FileReader implements Reader { // ачык ишке ашыруу
    // ... талаалар

    @Override
    public int read(byte[] p) {
        // ... окуу логикасы
        return 0; // мисал үчүн орун басар
    }
}

Goда имплициттүү ишке ашыруу негизги артыкчылыктары:

  • Өзүнчө дизайн: Жаңы китепканаларга интерфейстерди аныктоого мүмкүндүк берет, алар азыркы түрлөр менен ишке ашырылышы мүмкүн, алардын өзгөртүүсүз.
  • Ийкемдүүлүк: Бир эле интерфейсти аткарган ар кандай түрлөр менен иштей турган жалпы функцияларды түзүүгө жеңилдик берет.
  • "implements" талап кылынбайт: Бойлерплейт кодду азайтат.
  • Duck typing: Эгер түрү качка сыяктуу көрүнсө жана качка сыяктуу кычкырса, анда ал качка. Эгер түрү интерфейс методдорун ишке ашырса, ал ошол интерфейс катары колдонулушу мүмкүн.