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

Go 中的嵌入:何时使用指针与值?

Susan Sarandon
发布: 2024-11-02 08:21:29
原创
194 人浏览过

Embedding in Go: When to Use a Pointer vs. a Value?

Go 中的嵌入:何时使用指针

将一个结构体嵌入另一个结构体时,使用指针还是值取决于关于所需的功能和内存管理注意事项。

使用值

按值嵌入结构意味着嵌入结构的副本存储在包含结构中。这适用于以下情况:

  • 嵌入结构体较小且访问频繁。
  • 无需在运行时动态更改嵌入结构体。
<code class="go">type Job struct {
    Command string
    log.Logger
}</code>
登录后复制

使用指针

通过指针嵌入结构允许在包含结构的多个实例之间共享内存。这对于:

  • 嵌入大型或复杂的结构以避免不必要的重复。
  • 在运行时启用对嵌入结构的动态更改。
<code class="go">type Job struct {
    Command string
    *log.Logger
}</code>
登录后复制

通过指针嵌入优点

Eric Urban(“Hydrogen18”)创造了术语“通过指针嵌入”。它具有以下优点:

  • 使用通过引用初始化结构的函数,利用 NewX 惯用法。
  • 嵌入类型的功能而无需知道其实例化时间。

带有嵌入的享元模式指针

通过嵌入指向 Bitmap 结构的指针,多个 Renderer 结构可以共享相同的底层位图数据,从而减少内存消耗并实现运行时灵活性。

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

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

指针嵌入的限制

匿名字段不能有指向的指针指针或指向接口类型的指针,因为这些类型没有方法。此限制旨在防止错误使用接口指针并保持语言的一致性。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板