170 похожих чатов

Привет. архитектура. есть 2 вида "моста" (не вдаваюсь в подробности, ибо

не важно в этом случае).
и есть пачка методов, которые ну прям тютелька в тютельку одинаковые. и надо бы сделать какую-то общую структуру, где поместятся те одинаковые методы и уже от этой структуры "отнаследую" те 2 вида бриджа.

...так бы я думал в языках, где наследование поддерживается. а в го как надо думать в данной ситуации? не копипастить же методы?))

сейчас я сделал так. как описал выше иии... чет мне кажется, что это прям настолько костыль, что более костыля я в жизни не видал)

блин, жаль нельзя скрины скинуть, крч сделал структуру
package networks
type CommonBridge struct {
Bridge
Client *ethclient.Client
...
}
где Bridge это интерфейс. и "отнаследовал" бриджы для двух сетей типа
package eth
type Bridge struct {
networks.CommonBridge
...
}

и нагуглил такое решение, шо костыль костылём

package eth
func New(...) (*Bridge, error) {
...
b := &Bridge{...}
b.CommonBridge.Bridge = b
}

b.CommonBridge.Bridge = b - это всё таки костыль или не костыль?) или в го принято вообще по другому мою проблему решать?) подскажите)

13 ответов

23 просмотра

Какую проблему вы пытаетесь решить в итоге?

nacknime- Автор вопроса

Нужно больше контекста

У вас Bridge то интерфейс, то структура. И самое главное, ничего не понятно что именно в доменной области вы пытаетесь сделать

nacknime- Автор вопроса
uint32_t
Нужно больше контекста

ну допустим есть две несвязанные между собой структуры type Cat struct{} type Dog struct{} и есть у них одинаковый метод func (c *Cat) eat() {fmt.Println("eat")} func (c *Dog) eat() {fmt.Println("eat")}

nacknime
ну допустим есть две несвязанные между собой струк...

Вынести общий код в обычную функцию и вызывать ее внутри методов?

nacknime- Автор вопроса
Anton Kucherov
Вынести общий код в обычную функцию и вызывать ее ...

тот код вызывает другие методы этой структуры, мне эти методы тоже сделать обычными функциями получается?)

Если структуры никак не связаны, не надо обобщать их код ради "избегания дублежки"

nacknime
ну допустим есть две несвязанные между собой струк...

type Common struct{} func (c *Common) eat() {fmt.Println("eat")} type Cat struct{ Common } type Dog struct{ Common }

nacknime- Автор вопроса
Anton Kucherov
Если структуры никак не связаны, не надо обобщать ...

ну как не связаны, они типа общей логикой связаны - у меня два "моста"

nacknime
ну допустим есть две несвязанные между собой струк...

Мне кажется, для начала нужно ответить на вопрос: если у них одинаковые методы с одинаковой логикой - почему это разные структуры?

Вместо скринов можно использовать https://go.dev/play/

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта