慕森王
快速查看汇编输出显示$ go build -gcflags -S z.go该getNumber()函数确实将其结果存储到堆栈中"".getNumber t=1 size=16 value=0 args=0x10 locals=0x0 0x0000 00000 (z.go:5) TEXT "".getNumber+0(SB),4,$0-16 0x0000 00000 (z.go:6) MOVQ "".i+8(FP),BX 0x0005 00005 (z.go:6) MOVQ BX,"".~r1+16(FP) 0x000a 00010 (z.go:6) RET ,所以当它被 goroutine 调用时,它确实将其结果存储到堆栈中。然而,这是一个新的堆栈,它在 goroutine 结束时被销毁,因此无法检索返回值。"".main t=1 size=96 value=0 args=0x0 locals=0x18 0x0000 00000 (z.go:9) TEXT "".main+0(SB),$24-0 0x0000 00000 (z.go:9) MOVQ (TLS),CX 0x0009 00009 (z.go:9) CMPQ SP,16(CX) 0x000d 00013 (z.go:9) JHI ,22 0x000f 00015 (z.go:9) CALL ,runtime.morestack_noctxt(SB) 0x0014 00020 (z.go:9) JMP ,0 0x0016 00022 (z.go:9) SUBQ $24,SP 0x001a 00026 (z.go:10) MOVQ $0,AX 0x001c 00028 (z.go:10) CMPQ AX,$10 0x0020 00032 (z.go:10) JGE $0,74 0x0022 00034 (z.go:11) MOVQ AX,"".i+16(SP) 0x0027 00039 (z.go:11) MOVQ AX,(SP) 0x002b 00043 (z.go:11) MOVQ $"".getNumber·f+0(SB),CX 0x0032 00050 (z.go:11) PUSHQ CX, 0x0033 00051 (z.go:11) PUSHQ $16, 0x0035 00053 (z.go:11) PCDATA $0,$0 0x0035 00053 (z.go:11) CALL ,runtime.newproc(SB) 0x003a 00058 (z.go:11) POPQ ,CX 0x003b 00059 (z.go:11) POPQ ,CX 0x003c 00060 (z.go:10) MOVQ "".i+16(SP),AX 0x0041 00065 (z.go:10) INCQ ,AX 0x0044 00068 (z.go:10) NOP , 0x0044 00068 (z.go:10) CMPQ AX,$10 0x0048 00072 (z.go:10) JLT $0,34 0x004a 00074 (z.go:13) MOVQ $5,(SP) 0x0052 00082 (z.go:13) PCDATA $0,$0 0x0052 00082 (z.go:13) CALL ,time.Sleep(SB) 0x0057 00087 (z.go:14) ADDQ $24,SP 0x005b 00091 (z.go:14) RET ,然而,没有办法检索这些结果。