Golang's Initialization Syntax for Slices and Maps
In Go, declaring and initializing slices and maps can involve anonymous structures, an aspect that may cause confusion. Let's delve into the nuances of these initialization techniques.
To illustrate, consider the following line from Chapter 7 of GOPL:
<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>
This code defines a slice of Track pointers. Within the slice initialization, the elements appear to be anonymous structures without explicit type declarations. However, Go allows you to initialize these structures using a syntax shortcut:
<code class="go">f := []<type>{{...}, {...}}</code>
This syntax is effectively equivalent to:
<code class="go">f := []<type>{<type>{...}, <type>{...}}</code>
where
<code class="go">f := []*Track{{...}, {...}}</code>
which is equivalent to:
<code class="go">f := []*Track{&Track{...}, &Track{...}}</code>
This syntax also applies to maps:
<code class="go">f := map[string]<type>{"a": {...}, "b": {...}} // equivalent to f := map[string]<type>{"a": &<type>{...}, "b": &<type>{...}}</code>
Anonymous structures, on the other hand, refer to structures without a separate type definition. Anonymous types are distinct from anonymous structures, where only the structure itself lacks a name. A true anonymous structure is written as:
<code class="go">f := []struct{ A, B int }{ {1, 2}, {3, 4} }</code>
In this case, the struct within the list has no type definition and is referred to anonymously. The initialization shorthand allows us to conveniently initialize this structure without a named type.
The above is the detailed content of How does Go\'s initialization syntax for slices and maps handle anonymous structures?. For more information, please follow other related articles on the PHP Chinese website!