title: How to design structure with modifiable fields?
body: <p>I am writing a simple game in Go and have some problems with it. My, cut off, code looks like this:</p>
  
  <pre><code>package main
  
  import "fmt"
  
  type Location struct {
      X int
      Y int
  }
  
  type Car struct {
      MaxSpeed int
      Loc Location
  }
  
  func (car Car) SetLocation(loc Location) {
      car.Loc = loc
  }
  
  func (car Car) GetLocation() Location {
      return car.Loc
  }
  
  type Bike struct {
      GearsNum int
      Loc Location
  }
  
  func (bike Bike) SetLocation(loc Location) {
      bike.Loc = loc
  }
  
  func (bike Bike) GetLocation() Location {
      return bike.Loc
  }
  type Movable interface {
      GetLocation() Location
      SetLocation(Location)
  }
  
  type Fleet struct {
      vehicles []Movable
  }
  
  func (fleet *Fleet) AddVehicles(v ...Movable) {
      for _, x := range(v) {
          fleet.vehicles = append(fleet.vehicles, x) 
      }
  }
  
  func (fleet *Fleet) WherTheyAre() {
      for _, v := range(fleet.vehicles) {
          fmt.Println(v.GetLocation())
      }
  }
  
  func main() {
      myCar := Car{MaxSpeed: 200, Loc: Location{12, 34}}
      myBike := Bike{GearsNum: 11, Loc: Location{1, 1}}
  
      myFleet := Fleet{}
      myFleet.AddVehicles(myCar)
      myFleet.AddVehicles(myBike)
      myFleet.WherTheyAre()
  
      myCar.SetLocation(Location{0,0})
      myFleet.WherTheyAre()
  }
  </code></pre>
  
  <p>The assumption is that Car and Bike are very big structures which I do not want to copy. How should I design the code to be able to modify the location of the car which is the part of the Fleet? Other words how to design the Fleet struct to be able to modify its movable objects?
  I have tried to experiment with pointers to interfaces but I was not good idea...</p>
  
  <p>Thanks for help!</p>