Golang methods

Basics

In Go methods can be defined on [Golang Structs](Golang Structs) and non-struct types. In this case a receiver argument ias passed between func keyword and the method name (Abs):

package main
 
import (
	"fmt"
	"math"
)
 
type Vertex struct {
	X, Y float64
}
 
func (v Vertex) Abs() float64 {
	return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
 
func main() {
	v := Vertex{3, 4}
	fmt.Println(v.Abs())
}

Pointers

To modify struct values methods must be declared with pointer receivers:

package main
 
import (
	"fmt"
	"math"
)
 
type Vertex struct {
	X, Y float64
}
 
func (v Vertex) Abs() float64 {
	return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
 
func (v *Vertex) Scale(f float64) {
	v.X = v.X * f
	v.Y = v.Y * f
}
 
func main() {
	v := Vertex{3, 4}
	v.Scale(10)
	fmt.Println(v.Abs())
}