How does Go handle the initialization of a slice of pointers with anonymous structs?

Barbara Streisand
Release: 2024-10-31 15:39:13
Original
371 people have browsed it

How does Go handle the initialization of a slice of pointers with anonymous structs?

Initializing Slice of Pointers with Anonymous Structs in Go

In Chapter 7.6 of the "Go Programming Language" text, the initialization of a slice of Track pointers using anonymous structs (structures without explicit type definitions) can be confusing. The following example illustrates this:

<code class="go">var tracks = []*Track{
    {"Go", "Delilah", "From the Roots Up", 2012, length("3m38s")},
    {"Go", "Moby", "Moby", 1992, length("3m37s")},
    {"Go Ahead", "Alicia Keys", "As I Am", 2007, length("4m36s")},
    {"Ready 2 Go", "Martin Solveig", "Smash", 2011, length("4m24s")},
}</code>
Copy after login

The syntax for initializing a slice of pointers resembles the initialization of a slice of structs, with the addition of * before the element type. However, under the hood, the syntax is actually a shortcut for initializing a slice of values with a type specified at compile time.

<code class="go">f := []<type>{{...}, {...}}</code>
Copy after login

This is equivalent to the following:

<code class="go">f := []<type>{<type>{...}, <type>{...}}</code>
Copy after login

In the case of pointers, it becomes:

<code class="go">f := []*<type>{{...}, {...}}</code>
Copy after login

Which is equivalent to:

<code class="go">f := []*<type>{&amp;<type>{...}, &amp;<type>{...}}</code>
Copy after login

This means that the anonymous struct syntax is a convenience for initializing slices of pointers.

However, note that when initializing a slice of pointers, the values can be of an anonymous struct type, as long as the type remains consistent within the slice.

<code class="go">a := []Ex{Ex{1, 2}, Ex{3, 4}}
b := []Ex{{1, 2}, {3, 4}}
c := []*Ex{&amp;Ex{1, 2}, &amp;Ex{3, 4}}
d := []*Ex{{1, 2}, {3, 4}}</code>
Copy after login

Mixing and matching anonymous structs with regular structs is not allowed, as in this example:

<code class="go">e := []*Ex{{1, 2}, &amp;Ex{3, 4}} // Syntax Error!</code>
Copy after login

This occurs because the compiler cannot infer the type of the anonymous struct from a pointer to a struct.

The above is the detailed content of How does Go handle the initialization of a slice of pointers with anonymous structs?. 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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!