pym*_*ymd 1 oop constructor structure initialization go
我必须在golang中创建类似于2级继承的替代品,即在包中,我有一个结构(A),它由另一个包中的另一个结构(B)继承(嵌入为匿名字段),其目标是由" 主 "包使用.
现在,我为"B"(BPlease)创建了一个初始化方法,该方法返回B的对象(比如B_obj).我可以在程序开始时从我的"main"包中调用这个初始化程序(BPlease).
"B"(比如,HelloB())的方法之一,在执行期间使用"B"对象调用"A"(例如,HelloA())方法.
但我真正想要的是,类似于"A"的构造函数,可以初始化其字段(最好是在B_obj在包"main"中创建),然后"B"调用任何"A"方法.
怎么做到这一点?
我尝试为"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.
}
Run Code Online (Sandbox Code Playgroud)
我不能将所有字段值作为参数传递给B_obj,因为有很多字段,并且还通过调用相同结构的方法生成一些字段值.
如果没有人对于语言的斗争有什么意见,那就是它没有:不,没有任何神奇的方法,比如"getter"或"setter"等等.远程相关(神奇的力量)可能是终结者,但在这种情况下他们肯定不会有所帮助.
但是,让我建议停止在Go中编写语言X. 只需使用Go.Go不使用"类类"继承,也不使用Go程序员(通常).把Go想象成现代化的C.那里依赖继承的C代码并不多.(好吧,我知道GObject ;-)