Здравствуйте, LaptevVV, Вы писали:
LVV>Наследования в Го не принципиально.
LVV>Есть шаблоны
LVV>Есть рефлексия.
LVV>Наверное, с их помощью можно.
LVV>Как — не подскажу, я в Го еще даже не джун...
С
шаблонами дженериками не выйдет. Во-первых нет дженерик методов (может быть либо type, либо func(), но не func()()). Во вторых:
func (f *foo) Bar() {
f.Foo() // Ожидается, что здесь будет вызван метод "наследника"
// Но похоже, что инфорация о типе здесь безвозвратно утеряна.
log.Println("foo:Bar")
}
f *foo не помнит, что он был *bar, поэтому и возникла проблема. Из-за той-же причины и рефлекцией особо не нарефлексируешь. Не говоря уже, что решать такую задачу рефлексией — это вообще фу. Лучше уж копипастить и ждать go2, где предлагаются контракты с реализацией по умолчанию. Но по опыту с дженериками ждать этих введений смысла особо нет, т.к. похоже, что всё равно сделают через анус, и особо с этим ничего и не сделаешь.