请考虑以下代码:
type Intf interface {
Method()
}
type TypeA struct {
TypeBInst Intf
}
func (*TypeA) Method() {
log.Println("TypeA's Method")
}
func (t *TypeA) Specific() {
t.TypeBInst.Method() // Call override from TypeB
log.Println("Specific method of TypeA")
}
type TypeB struct {
*TypeA
}
func (*TypeB) Method() {
log.Println("TypeB's Method")
}
是否有另一种方法可以从func (*TypeB) Method()
内部调用func (t *TypeA) Specific()
,而不是将TypeB
实例存储在TypeA
{@ 1}}实例内TypeB
1}?它反对golang原则吗?
工作示例:playground
答案 0 :(得分:0)
是否有另一种方法从func(t * TypeA)内部调用func(* TypeB)方法()而不是在TypeB的嵌入式TypeA实例中存储指向TypeB实例的指针?
是的,there is:
package main
import "log"
type TypeB struct{}
func (*TypeB) Method() {
log.Println("TypeB's Method")
}
func main() {
(*TypeB).Method(nil)
}
但它仅适用于nilable接收器(不需要接收器的实例)。
它反对golang原则吗?
不是我所知道的,但我个人从未在任何项目中都要求这样做。