2017-05-28 21:17:32 +00:00
|
|
|
// There are no classes, only structs. Structs can have methods.
|
|
|
|
// A struct is a type. It's also a collection of fields
|
|
|
|
|
|
|
|
// Declaration
|
|
|
|
type Vertex struct {
|
|
|
|
X, Y int
|
|
|
|
}
|
|
|
|
|
|
|
|
// Creating
|
|
|
|
var v = Vertex{1, 2}
|
|
|
|
var v = Vertex{X: 1, Y: 2} // Creates a struct by defining values with keys
|
|
|
|
var v = []Vertex{{1,2},{5,2},{5,5}} // Initialize a slice of structs
|
|
|
|
|
|
|
|
// Accessing members
|
|
|
|
v.X = 4
|
|
|
|
|
|
|
|
// You can declare methods on structs. The struct you want to declare the
|
2018-07-17 09:42:16 +00:00
|
|
|
// method on (the receiving type) comes between the func keyword and
|
2017-05-28 21:17:32 +00:00
|
|
|
// the method name. The struct is copied on each method call(!)
|
|
|
|
func (v Vertex) Abs() float64 {
|
|
|
|
return math.Sqrt(v.X*v.X + v.Y*v.Y)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Call method
|
|
|
|
v.Abs()
|
|
|
|
|
|
|
|
// For mutating methods, you need to use a pointer (see below) to the Struct
|
|
|
|
// as the type. With this, the struct value is not copied for the method call.
|
|
|
|
func (v *Vertex) add(n float64) {
|
|
|
|
v.X += n
|
|
|
|
v.Y += n
|
|
|
|
}
|
|
|
|
|
|
|
|
// **Anonymous structs:**
|
|
|
|
// Cheaper and safer than using `map[string]interface{}`.
|
|
|
|
point := struct {
|
|
|
|
X, Y int
|
|
|
|
}{1, 2}
|