我必须在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,因为有很多字段,而且,一些字段值是通过调用相同结构的方法生成的。