Not knowing which type of receiver to use

In Go, you can have either a pointer or a value receiver.

Mistake

This will not mutate the customer balance.

func (c customer) add(v float64) {
  c.balance += v
}

Fix

func (c *customer) add(v float64) {
  c.balance += v
}

Use pointer receivers for mutating an object. Use value receivers to keep an object immutable.

References