
In Chapter 7 of GOPL, an example is given for initializing a slice of pointers to Track structs:
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")},
}To understand the syntax, let's examine the following code where we define a custom Ex struct and initialize its slices:
type Ex struct {
A, B int
}
a := []Ex{Ex{1, 2}, Ex{3, 4}}
b := []Ex{{1, 2}, {3, 4}}
c := []*Ex{&Ex{1, 2}, &Ex{3, 4}}
d := []*Ex{{1, 2}, {3, 4}}
e := []*Ex{{1, 2}, &Ex{3, 4}}In cases a and b, we initialize the slices with instances of the Ex struct using a shortcut syntax:
f := []<type>{{...}, {...}}This is equivalent to:
f := []<type>{<type>{...}, <type>{...}}For cases c, d, and e, the syntax requires a bit more explanation. The initialization:
f := []*<type>{{...}, {...}}Is analogous to:
f := []*<type>{&<type>{...}, &<type>{...}}In other words, the curly braces following the type specify the values for a struct of that type, and the ampersands create pointers to those structs.
Finally, in the following code, we receive a syntax error:
f := []*Ex{&{1, 2}, &{3, 4}} // Syntax Error!This is because the curly braces must be followed by the name of a type, not an anonymous struct. The correct syntax would be:
f := []*Ex{&Ex{1, 2}, &Ex{3, 4}}The above is the detailed content of How to Initialize a Slice of Pointers to Structs in Go: A Breakdown of Anonymous Struct Syntax?. For more information, please follow other related articles on the PHP Chinese website!
Is Huawei's Hongmeng OS Android?
Laravel Tutorial
What are the basic components of a computer?
What are the methods of rounding in sql
What is the statement to delete a table in sql
JS array sorting: sort() method
Solution to Win7 folder properties not sharing tab page
Will Sols inscription coins return to zero?