Home  >  Article  >  Backend Development  >  When Embedding in Go: Pointer or Value?

When Embedding in Go: Pointer or Value?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-25 00:45:11211browse

When Embedding in Go: Pointer or Value?

Which Is Preferable for Embedding in Go: Pointer or Value?

In Go, embeddability allows you to reuse fields and methods from one type within another type. However, you have the option of embedding by pointer or by value. The choice between the two can impact the behavior and efficiency of your code.

Embedding by Pointer

When you embed a type by pointer, the embedded type's fields are accessed through pointers. This approach is useful when:

  • Renderer is passed around by value and the methods you need on Bitmap are defined on *Bitmap.

Embedding by Value

When you embed a type by value, the embedded type's fields are copied into the embedding type. This is preferred when:

  • Bitmap has a constructor function that returns a pointer, and the zero value of Bitmap is not usable.
  • All the Bitmap methods are value methods.

Considerations for the Provided Example

In the example provided:

type Bitmap struct{
    data [4][4]bool
}

type Renderer struct{
    *Bitmap
    on uint8
    off uint8
}

Embedding by value is generally preferable in this case because:

  1. Small type: The Bitmap type is compact, so embedding by value causes minimal memory overhead.
  2. Locality of access: Accessing Bitmap fields within Renderer does not require dereferencing a pointer.
  3. Reduced memory allocations: Embeddings by value avoid the creation of an additional pointer object.

The above is the detailed content of When Embedding in Go: Pointer or Value?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn