Как создать базовый метод для семейства родственных структур в Go? Доброго времени суток, коллеги. Начал изучать Go и появился такой вопрос, ввиду нетипичности ОО-возможностей языка: Допустим, у меня есть базовая структура A. Я описал ее члены и имплементировал для нее методы (именно методы структуры, а не функции). Например, я имплементировал 5 базовых методов. Далее, у меня появилась необходимость создать родственную структуру (B) и добавить к ней еще одно поле, при этом сохранив за ней возможность использовать методы родительской структуры (А)? Как это реализовать в Go? По тем материалам, что мне довелось прочесть, такое можно реализовать через композицию/агрегацию + интерфейсы. Есть ли более привычный способ передачи поведения, в стиле наследования поведения?

1 Сен 2022 в 19:54
225 +1
0
Ответы
1

В Go, наследование не поддерживается напрямую, как в других объектно-ориентированных языках. Однако вы можете достигнуть подобного поведения, используя композицию и интерфейсы.

Для вашего случая, можно создать интерфейс, который определяет методы вашей базовой структуры A, а затем имплементировать этот интерфейс в структуре B. В результате структура B будет иметь доступ ко всем методам, определенным в интерфейсе, который включает методы структуры A.

Пример:

package main
import (
"fmt"
)
type A struct {
Field1 int
Field2 string
}
func (a A) Method1() {
fmt.Println("Method1")
}
func (a A) Method2() {
fmt.Println("Method2")
}
type InterfaceA interface {
Method1()
Method2()
}
type B struct {
Field3 float64
A
}
func main() {
b := B{Field3: 3.14, A: A{Field1: 42, Field2: "hello"}}
b.Method1()
b.Method2()
fmt.Printf("%+v\n", b)
}

В данном примере структура B содержит поле типа A, что позволяет ей использовать все методы, определенные для структуры A. Таким образом, вы можете добавить дополнительные поля к структуре B и при этом сохранить доступ к методам структуры A.

Надеюсь, это поможет вам решить вашу задачу. Удачи в изучении Go!

16 Апр в 18:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 017 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир