gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:49:07 25 4
gpt4 key购买 nike

我必须在 golang 中创建一个类似于 2 级继承的替代品,即在一个包中,我有一个结构(A),它被另一个包中的另一个结构(B)继承(作为匿名字段嵌入),其对象是被“ma​​in”包使用。

现在,我为“B”(BPlease) 创建了一个初始化方法,它返回 B 的一个对象(例如,B_obj)。我可以在程序开始时从我的“主”包中调用这个初始化器(BPlease)。

“B”的一个方法(例如,HelloB()),在执行过程中调用了“A”的一个方法(例如,HelloA()),使用“B”的对象。

但我真正想要的是,类似于“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,因为有很多字段,而且一些字段值是通过调用相同结构的方法生成的。

最佳答案

不管任何人对在没有继承的情况下与语言作斗争的观点如何:不,没有魔法方法,比如任何东西的“getter”或“setter”。远程相关(魔力)可能是终结器,但在这种情况下它们肯定不会有帮助。

但是,让我建议停止在 Go 中编写 X 语言。只需使用围棋。 Go 不使用“类类”继承,Go 程序员(通常)也不应该使用。将 Go 想象成现代化的 C。那里没有太多依赖继承的 C 代码。 (好的,我知道 GObject ;-)

关于oop - 如何在golang中创建一个自动调用的结构方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16897925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com