首页 > 后端开发 > Golang > 正文

在 Go 中嵌入结构时:指针还是嵌入值?

Linda Hamilton
发布: 2024-10-31 06:28:30
原创
233 人浏览过

When Embedding Structs in Go: Pointers or Embedded Values?

嵌入结构:何时首选指针

将一个结构嵌入另一个结构时,有两种选择:使用指针或嵌入值。为了指导这个决定,了解规范并考虑每种方法的优点非常重要。

指针与嵌入值

根据 Go 规范,匿名字段(也称为嵌入字段)可以声明为类型名称或指向非接口类型名称的指针。这意味着您可以选择在以下示例中为 Logger 字段使用类型 log.Logger 或指针 *log.Logger:

<code class="go">type Job struct {
    Command string
    *log.Logger
}</code>
登录后复制

指针的好处

Eric Urban 的文章《Embedding in Go》重点介绍了嵌入指针的优点,简称“embed”通过指针。”其中包括:

  • 初始化灵活性:使用 NewX 习惯用法的函数通常通过指针返回结构体,从而允许轻松初始化。
  • 动态扩展性:嵌入指针使您能够在运行时动态更改嵌入实例,而无需实例化结构。这对于享元模式等场景非常有用。

指针嵌入示例

<code class="go">type Bitmap struct{
    data [4][5]bool
}

type Renderer struct{
    *Bitmap //Embed by pointer
    on uint8
    off uint8
}</code>
登录后复制

在此示例中,渲染器类型通过以下方式嵌入位图指针。这意味着 Renderer 的多个实例可以共享单个 Bitmap 实例并独立自定义其行为。

技术限制

需要注意的是,您不能使用指向指针的指针或作为匿名字段指向接口的指针。这种限制源于这些类型没有方法,这是嵌入的一个关键方面。方法从嵌入类型提升为嵌入类型,允许您直接访问它们。

以上是在 Go 中嵌入结构时:指针还是嵌入值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!