If writing assembly code to run in the Go environment, and you're changing pointers, you have to write garbage-collector aware code.[1][2] Go has concurrent garbage collection, which means there are some unusual constraints on code that manipulates pointers.
This is an area where proofs of correctness are considered necessary, because intuition fails. See [3]