Sobes.tech
Senior

Къде е по-добре да се определя интерфейсът — в мястото на имплементация или в мястото на използване?

sobes.tech AI

Отговор от AI

В Go е по-добре да дефинирате интерфейсите там, където се използват, а не там, където се реализират. Това позволява създаването на минимални интерфейси, които описват само методите, които наистина са необходими на потребителя.

Този подход увеличава гъвкавостта и улеснява тестването, тъй като реализацията не трябва да знае всички интерфейси, а само тези, които й трябват.

Пример:

// В мястото на използване
type Reader interface {
    Read(p []byte) (n int, err error)
}

func Process(r Reader) {
    // използва само метода Read
}

// В мястото на реализация
type File struct {}
func (f *File) Read(p []byte) (int, error) {
    // реализация
}

По този начин интерфейсът се определя въз основа на нуждите на клиента, а не на реализацията.