func (f *Foo) sayHello() { ... }
Would become func sayHello(f *Foo) { ... }
Heck, if you want to keep the value.sayHello() syntax, you can, which would still allow you to build fluent interfaces or whatnot, with the bonus point of being UFCS!
The simulation rate is often lower than the draw rate though. Minecraft is as low as 20 updates per second, while something like Counter Strike 2 handles events immediately and sends precise timestamps to the server, not discretized to any sampling rate beyond your hardware.