golang 1.17 changed from stack to register to handle the params
is it safe when i use atomic.SwapPointer to change the pointer receiver's value
below is the code
//like this
func (this *A) Replace(a *A) {
//other business logic
//....
//business logic end
atomic.SwapPointer((*unsafe.Pointer)(unsafe.Pointer(&this)), unsafe.Pointer(a))
}