package main import ( "fmt" ) type vertex struct { x, y float64 } // note that this one can deal fine with a copy: func (v vertex) abs() float64 { return v.x + v.y } // but this function needs access to the actual struct members func (v *vertex) scale(s float64) { v.x *= s v.y *= s } func main() { v := vertex{1.1, 2.2} fmt.Println(v.abs()) v.scale(12) fmt.Println(v.abs()) }