函数:多返回值
//go:noinline
func test(x int) (int, int) {
return x + 1, x + 2
}
func main() {
a, b := test(100)
println(a, b)
}
$ go build && go tool objdump -s "main\.main" test
函数提供多返回值。多返回值在语法上接近于 Python,在实现上方式上不一样。Python 多返回值实际上打包成一个元组返回,在语法上展开,元组是单个对象。Go 语言的确返回两个返回值,我们需要分配两个返回值区域内存。
调用CALL main.test
的时候,100参数进去MOVE $0x64, 0(SP)
,接下来分别从0x8(SP)
和0x10(SP)
取了两次的数据,分别保存到0x20(SP)
和0x18(SP)
。所以函数有多个返回值,调用的时候,首先参数是 100,两个空间用来保存两个返回值。
函数:命名返回值
//go:noinline
func test() (x int) {
x = 100
return
}
</