golang多重赋值时, 如何实现值得交换?

golang代码

package main

import "fmt"

//GOOS=linux GOARCH=386 go tool compile -S main.go >> main.S
//go build -gcflags="-N -l -S" main.go
func main() {
	a := 1
	b := 9
	a, b = b, a
	fmt.Println("a:", a, "b:", b)
}

查看汇编代码:

MOVQ    $1, "".a+56(SP) //将1存入栈帧SP,偏移位置56,别名a
MOVQ    $9, "".b+48(SP) //将9存入栈帧SP,偏移位置48,别名b
MOVQ    "".a+56(SP), AX //将a的值存入寄存器 AX
MOVQ    AX, ""..autotmp_3+64(SP) //将AX的值存入栈帧SP,偏移位置64,别名autotmp_3
MOVQ    "".b+48(SP), AX  //将b的值存入寄存器 AX
MOVQ    AX, "".a+56(SP) //将AX的值存入栈帧SP,偏移位置56,别名a
MOVQ    ""..autotmp_3+64(SP), AX //将autotmp_3的值存入寄存器AX
MOVQ    AX, "".b+48(SP) //将AX的值存入栈帧SP,偏移位置48,别名b

也就是说底层实现仍然使用了中间变量 autotmp_3 .