Home > Backend Development > Golang > How Can You Initialize an Embedded Struct Field Using an Existing Instance in Go?

How Can You Initialize an Embedded Struct Field Using an Existing Instance in Go?

DDD
Release: 2024-11-12 06:03:02
Original
982 people have browsed it

How Can You Initialize an Embedded Struct Field Using an Existing Instance in Go?

Issues Encountered with Embedded Struct Initialization in Go

Embedded structs offer significant advantages in Go, but they can sometimes present unique challenges, particularly during initialization. Consider the following scenario, where a struct containing an anonymous inner struct must be initialized using an existing instance of the inner struct.

type MyRequest struct {
    Request http.Request
    PathParams map[string]string
}
func New(origRequest *http.Request, pathParams map[string]string) *MyRequest {
    // How to initialize "Request" field with "origRequest"?
}
Copy after login

Solution

To address this problem, there are two viable options:

Option 1:

req := new(MyRequest)
req.PathParams = pathParams
req.Request = *origRequest
Copy after login

In this approach, a new instance of MyRequest is created using new. The PathParams field is initialized with the provided pathParams map. The anonymous inner struct Request is initialized by explicitly assigning the dereferenced value of origRequest to it.

Option 2:

req := &MyRequest{
    PathParams: pathParams,
    Request: origRequest,
}
Copy after login

This alternative approach uses a composite literal syntax to create a new instance of MyRequest. Both the PathParams and Request fields are initialized within the literal. It's important to note that the Request field is initialized without the need for dereferencing.

Understanding Embedded Struct Field Naming

When an anonymous inner struct is embedded within a larger struct, the embedded fields inherit the name of the outer struct. In this case, both PathParams and Request become fields of MyRequest. For more information, refer to the Go specification on [Struct Types](https://go.dev/ref/spec#Struct_types).

The above is the detailed content of How Can You Initialize an Embedded Struct Field Using an Existing Instance in Go?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template