【发布时间】:2013-05-29 16:10:25
【问题描述】:
我必须在 golang 中创建一个类似于 2 级继承的替代品,即, 在一个包中,我有一个结构(A),它被另一个包中的另一个结构(B)继承(嵌入为匿名字段),其对象是被“main”包使用。
现在,我为“B”(BPlease)创建了一个初始化方法,该方法返回 B 的对象(例如,B_obj)。我可以在程序开始时从我的“主”包中调用这个初始化程序(BPlease)。
“B”的方法之一(比如,HelloB()),在执行过程中调用了“A”的方法(比如,HelloA()),使用“B's”对象。
但我真正想要的是,类似于“A”的构造函数,它可以在“B”调用“A”的任何方法之前初始化其字段(最好是在“main”包中创建 B_obj 时)。
如何做到这一点?
我也尝试为“A”创建一个初始化程序(APlease)并调用它(BPlease)来获取“A”的对象(A_obj)。但是我发现这个对象没用,因为我不能利用它在“B”方法(HelloB())中调用“A”方法(HelloA())。 如果有人能告诉我如何使用这个对象(A_obj),那就太好了。
这里有一些代码可以澄清我的查询:
package A
type A struct { whatever }
func (A_obj *A) HelloA(){performs some operation...} // a method of A()
func APlease() A {
return A{initialize A fields}
}
-------------------------------------------------------------------------------
package B
type B struct {
A
B fields
}
func BPlease() B {
return B{
A_obj := APlease() // useless to me.... how to utilise this?
initialize B fields}
}
func (B_obj *B) HelloB(){ // a method of B{}
call B_obj.HelloA() // valid as A is an anon field in B struct
some other operations // but A's fields are not initialized for B_obj
...}
---------------------------------------------------
package main
import "B"
import "A"
func main(){
B_obj := B.BPlease() // what I want is, calling this should initialize A's fields for B_obj as well so that when HelloB() calls B_obj.HelloA(), it utilises A's field that have been initialized.
}
由于字段很多,我无法将所有字段值作为参数传递给 B_obj,而且有些字段值是通过调用相同结构的方法生成的。
【问题讨论】:
-
我认为一些代码可以更容易地说明您想要什么以及为什么需要它。
-
@nos 感谢您的建议,我已经编辑了问题。
标签: oop constructor initialization go structure