如何在golang中创建一个自动调用的结构方法?

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,因为有很多字段,并且还通过调用相同结构的方法生成一些字段值.

zzz*_*zzz 7

如果没有人对于语言的斗争有什么意见,那就是它没有:不,没有任何神奇的方法,比如"getter"或"setter"等等.远程相关(神奇的力量)可能是终结者,但在这种情况下他们肯定不会有所帮助.

但是,让我建议停止在Go中编写语言X. 只需使用Go.Go不使用"类类"继承,也不使用Go程序员(通常).把Go想象成现代化的C.那里依赖继承的C代码并不多.(好吧,我知道GObject ;-)