gpt4 book ai didi

go - 为什么要在 golang 中使用组合?

转载 作者:IT王子 更新时间:2023-10-29 00:42:07 26 4
gpt4 key购买 nike

在下面的代码中,我展示了我认为在 golang 中嵌入(提升方法)和组合(不提升方法)之间的区别。

为什么你会想在 golang 中使用组合?

type obj1Inherited struct {
obj2
}

type obj1Composed struct {
someobj obj2
}

type obj2 struct {
}

func (o obj2) printTest() {
fmt.Println("obj2")
}

func main() {
o := obj1Inherited{}
o.printTest() //fine - printTest is promoted

obj1Composed := obj1Composed{}
obj1Composed.someobj.printTest() //fine because I'm using the composed obj
obj1Composed.printTest() //not fine - printTest is NOT promoted

最佳答案

值得一读 Effective Go 中的嵌入部分.

一个常见的例子是有一个带有互斥量的结构/映射。

type SafeStruct struct {
SomeField string
*sync.Mutex
}

打字更容易

safe := SafeStruct{SomeField: "init value"}

safe.Lock()
defer safe.Unlock()
safe.SomeField = "new value"

而不是必须编写适当的包装函数(重复的)或有

safe.mutex.Unlock()

当您对互斥字段所做的唯一事情就是访问方法时(在本例中为 Lock()Unlock())

当您尝试在嵌入式字段上使用多个函数(实现类似 io.ReadWriter 的接口(interface))时,这会变得更加有用。

关于go - 为什么要在 golang 中使用组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36704522/

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