@nakem

Как лучше принимать внутрь пакета функцию из другого пакета?

Одну функцию можно принять по сути двумя способами: передав саму функцию или передав структуру, а внутри пакета мы уже используем интерфейс, в котором есть нужная нам функция.
Покажу наглядно.
Вот первый способ:
package printhello

import "fmt"

type getNameFunc func() string

type PrintHello struct {
	getName getNameFunc
}

func New(getName getNameFunc) *PrintHello {
	return &PrintHello{
		getName: getName,
	}
}

func (ph *PrintHello) Print() {
	fmt.Printf("Hello %s\n", ph.getName())
}


А вот второй способ:
package printhello

import "fmt"

type getNamer interface {
	GetName() string
}

type PrintHello struct {
	getNamer getNamer
}

func New(getNamer getNamer) *PrintHello {
	return &PrintHello{
		getNamer: getNamer,
	}
}

func (ph *PrintHello) Print() {
	fmt.Printf("Hello %s\n", ph.getNamer.GetName())
}


Что лучше?
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ответы на вопрос 1
@PapaStifflera
Родился, вырос...
Лучше для чего?
У вас 2 разных кейса.
С первом вы можете иметь несколько инстансов ОДНОГО типа PrintHello с разными реализациями метода getName().
Во втором вы можете иметь НЕСКОЛЬКО различных типов, удовлетворяющих интерфейсу getNamer.
Какой именно лучше - зависит от конкретной задачи.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы