嵌入结构:何时首选指针
将一个结构嵌入另一个结构时,有两种选择:使用指针或嵌入值。为了指导这一决策,了解规范并考虑每种方法的优点非常重要。
指针与嵌入值
根据 Go 规范,匿名字段(也称为嵌入字段)可以声明为类型名称或指向非接口类型名称的指针。这意味着您可以选择对以下示例中的 Logger 字段使用类型 log.Logger 或指针 *log.Logger:
type Job struct {
Command string
*log.Logger
}
指针的好处
Eric Urban 的文章《Embedding in Go》强调了嵌入指针的优点,即“按指针嵌入” ”。其中包括:
指针嵌入示例
type Bitmap struct{
data [4][5]bool
}
type Renderer struct{
*Bitmap //Embed by pointer
on uint8
off uint8
}
在此示例中,Renderer 类型通过指针嵌入 Bitmap。这意味着 Renderer 的多个实例可以共享 Bitmap 的单个实例并独立自定义其行为。
技术限制
需要注意的是,您不能使用指向指针的指针或作为匿名字段指向接口的指针。这种限制源于这些类型没有方法,这是嵌入的一个关键方面。方法从嵌入类型提升为嵌入类型,允许您直接访问它们。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3