Я бывший разработчик python, иногда борющийся с явной природой Go. Я пытаюсь здесь реорганизовать некоторый код, чтобы иметь возможность перемещать метод из одной структуры в часть интерфейса. Но этот процесс кажется мне странным, я хочу подтвердить, что не делаю что-то неправильно.
У меня есть следующие интерфейсы, структура и методы:
type Executing interface {
Execute()
}
type MyExecuter struct {
attribut1 string
}
//The function I wish to move
func (exe1 *MyExecuter) format() string {
return fmt.sprintf ("formated : %s", exe1.attribut1)
}
func (exe1 *MyExecuter) Execute() {
//Executing
fmt.Println(exe.format())
}
func GetExecuter () Executer{
return MyExecuter{attribut1: "test"}
}
Итак, здесь у меня есть общий интерфейс выполнения, доступ к этому интерфейсу будет осуществляться объектом, возвращаемым методом GetExecuter.
Теперь, в рамках реализации одного из моих исполнителей, я хочу переместить метод форматирования как часть интерфейса.
Поэтому я делаю следующее:
type Formatting interface {
format() string
}
type Formatter struct {}
func (formatter *Formatter) format(exe1 *MyExecuter) (string) {
return fmt.sprintf ("formated : %s", exe1.attribut1)
}
Поэтому я создаю новый интерфейс, новую пустую структуру и обновляю свою функцию, чтобы использовать в качестве атрибута мою предыдущую структуру.
Хотя это, кажется, работает, мне кажется, что это немного запутанно. Особенно та часть, где мне нужно добавить ссылку на мой исходный объект в качестве атрибута метода. Я делаю здесь что-то не так, или это правильный путь?