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

查理:

在下面的代码中,我展示了我认为在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.selector.printTest() //fine because I'm using the composed obj
    obj1Composed.printTest() //not fine - printTest is NOT promoted
matt.s:

值得阅读有关“嵌入到有效Go中”的部分

一个常见的示例是具有Mutex的结构/映射。

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时,这将变得更加有用

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么要在AngularJS中使用$ onInit?

来自分类Dev

为什么要在 Angular 中使用 ValueAccessor?

来自分类Java

为什么要在Android中使用RequestQueue?

来自分类Dev

为什么要在Dialogflow中使用动作

来自分类Dev

为什么要在结构中使用malloc?

来自分类Dev

为什么要在FRP中使用行为

来自分类Dev

为什么要在延迟中使用setTimeout

来自分类Dev

为什么要在laravel中使用npm?

来自分类Dev

为什么要在Flux中使用“动作”?

来自分类Dev

为什么要在Flink中使用kafka

来自分类Dev

为什么要在Typescript中使用接口

来自分类Dev

为什么要在ListView中使用DataTemplate?

来自分类Dev

什么是背景?为什么要在odoo中使用?

来自分类Javascript

为什么要在JavaScript变量的名称中使用$(美元符号)?

来自分类Dev

为什么要在该程序中使用fflush(stdin)?

来自分类Dev

为什么要在Git中使用core.autocrlf = true?

来自分类Dev

为什么要在Java卡程序中使用“ setSeed()”?

来自分类Java

为什么要在main方法中使用SwingUtilities.invokeLater?

来自分类Dev

为什么要在“ if”语句中使用语句?

来自分类Java

为什么要在Java中使用`transient`关键字?

来自分类Dev

蜂巢:为什么要在选择中使用分区?

来自分类Dev

为什么要在Dropwizard指标中使用CachedGauage?

来自分类Dev

为什么要在执行脚本中使用bash?

来自分类Dev

为什么要在DI中使用`deps`属性

来自分类Dev

为什么要在python中使用`iter`函数

来自分类Linux

为什么我要在Dockerfile中使用VOLUME?

来自分类Dev

为什么要在Python中使用导入BaseHTTPServer?

来自分类Dev

为什么要在实时处理中使用Apache Kafka

来自分类Java

为什么要在Spring中使用self类?

Related 相关文章

热门标签

归档