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”)创造了术语“通过指针嵌入”。它具有以下优点:
带有嵌入的享元模式指针
通过嵌入指向 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中文网其他相关文章!