Go 中嵌入结构:何时使用指针
当考虑将一个结构嵌入另一个结构时,决定是否使用指针或者出现嵌入字段的值。本文探讨了这种实现选择的细微差别,并提供示例来说明潜在的好处和影响。
通过指针嵌入
Go 规范允许将结构体嵌入为指针或价值观。对于非接口类型,允许将匿名字段指定为类型名称 T 或指向非接口类型名称 *T 的指针。
指针嵌入的优点:
按值嵌入
将结构嵌入为value 嵌入了其所有功能,无需实例化知识。它有效地将嵌入结构的方法提升为封闭结构。
考虑以下示例:
type Job struct {
Command string
*log.Logger
}
在此示例中,Job 结构体嵌入了一个指向 log.Logger 类型的指针。这种方法使 Job 结构体能够访问 Logger 方法,同时允许动态分配不同的 Logger 实例。
type Job struct {
Command string
log.Logger
}
这里,Job结构体直接嵌入log.Logger类型作为值。现在可以直接从 Job 结构体访问提升的 Logger 方法。
结论
通过指针嵌入和通过值嵌入都有其独特的优点和注意事项。两种方法之间的选择取决于是否需要动态分配或方法升级。了解每种方法的含义有助于在 Go 中嵌入结构时做出明智的决策。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3