我有 2 个代码示例:func test() int { var x int defer func() { x++ }() x = 1 return x}func main() { fmt.Println(test())}它返回:1。但是,以下代码示例的行为有所不同:func test() (x int) { defer func() { x++ }() x = 1 return}func main() { fmt.Println(test())}它返回2。为了了解发生了什么,我反汇编了代码。对于第一个代码片段(其输出为1): main.go:19 0x48cf40 64488b0c25f8ffffff MOVQ FS:0xfffffff8, CX main.go:19 0x48cf49 483b6110 CMPQ 0x10(CX), SP main.go:19 0x48cf4d 7678 JBE 0x48cfc7 main.go:19 0x48cf4f 4883ec58 SUBQ $0x58, SP main.go:19 0x48cf53 48896c2450 MOVQ BP, 0x50(SP) main.go:19 0x48cf58 488d6c2450 LEAQ 0x50(SP), BP main.go:20 0x48cf5d e83effffff CALL main.test(SB) main.go:20 0x48cf62 e8c9bff7ff CALL runtime.convT64(SB) main.go:20 0x48cf67 488b442408 MOVQ 0x8(SP), AX main.go:20 0x48cf6c 0f57c0 XORPS X0, X0 main.go:20 0x48cf6f 0f11442440 MOVUPS X0, 0x40(SP)
- 1 回答
- 0 关注
- 175 浏览
添加回答
举报
0/150
提交
取消