У меня есть интерфейс:Правильный способ вызвать перегруженный метод встроенного типа в Go
package pkg
type BaseInterface interface {
func Nifty() bool
func Other1()
func Other2()
...
func Other34123()
}
и структуру, которая реализует его:
package pkg
type Impl struct {}
func (Impl) Nifty() bool { ... }
Затем идет вдоль другой-структуру, которая хочет, чтобы встраивать первый и сделать это самостоятельно Острота():
package myOtherPackage
import "pkg"
type ImplToo struct {
*pkg.Impl
}
func (it ImplToo) Nifty() bool { ... something else ... }
Это вроде как класса inheretance с методом переопределения в объектный LA nguage. Я хочу знать, как сделать эквивалент implToo.super(). Nifty(), то есть из реализации ImplToo Nifty(), вызывается реализация pkg.Impl Nifty().
Какое правильное преобразование используется на it
, чтобы я мог это сделать? Все, что я пытаюсь выходы либо неограниченную рекурсию на Nifty ImplToo (в), или какая-то ошибка компилятора, такие как:
invalid type assertion: (&it).(BaseInterface) (non-interface type *it on left)
... или много вариаций на это.
Вы пробовали 'it.Impl. Острота() '? – icza
я сделал. Проблема в том, что мой фактический «Impl» действительно назван как-то вроде «name.withADot», поэтому синтаксический анализ сообщает мне эквивалент '(тип ImplToo не имеет имени поля или метода). Казалось, это заставило меня подумать« ОК, , но он. (name.withADot) .Nifty анализируется как преобразование интерфейса и возвращается к ошибке «non-interface type on left». – BadZen
Не понимаю. Идентификатор не может содержать символ точки. Отправьте свой код. – icza