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 ответов

20 просмотров

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

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/

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта