I'm learning Go and I wrote this for a programming challenge. It is working (building and running) but I feel the code is not what Go code should be:

Am I using the struct element correctly? especially struct methods?

In the playTurn() method, I reassign results (else not taken into account) because scope. How to write it better? Pointer?

I am struggling with int, float64 and casting all the time. What's the good practice in this context were I need float for precision in-between but inputs and outputs are int?

What does this code do? It plays a 2D racing game between 4 pod-racers.
In an infinite loop controlled by the programming challenge server, this code reads inputs about pods states (cf. comments) and outputs the next action my pods should take.
The part I want to discuss is the simulation part: the code also forecast what my pod state should be after taking the next action.
I don't really care if there are bugs right now (since I am writing unit tests to catch them), still I am open to any criticism.

However, I am worried I didn't write in a Go-like manner. See my 3 questions. As a consequence of a better Go code, I expect better performances.

\$\begingroup\$thanks for the feedback & the edit. Should I split it into 3 posts : OOP in Go, is it a pointers use case, how to manage int and float64 ?\$\endgroup\$
– PoutrathorMar 25 at 14:29

\$\begingroup\$@Poutrathor I've not taken the time to read through your code yet, but I did notice the use of value receivers. It doesn't make sense to have functions like move on a type, and in those funcs statements like pod.position.x += pod.vx * t (assigning values), unless you're dealing with pointer receivers. Otherwise, you'd just be reassigning values on a copy, but the object itself is never changed.\$\endgroup\$
– Elias Van OotegemApr 19 at 14:03