2022-10-26:以下go语言代码输出什么?A:1 3 2;B:1 2 3;C:3 1 2;D:3 2 1
2022-10-26:以下go语言代码输出什么?A:1 3 2;B:1 2 3;C:3 1 2;D:3 2 1。
package main
import "fmt"
type temp struct{}
func (t *temp) Add(elem int) *temp {
fmt.Println(elem)
return &temp{}
}
func main() {
tt := &temp{}
defer tt.Add(1).Add(2)
tt.Add(3)
}
答案选A。defer tt.Add(1).Add(2)是链式的,Add(1)会直接执行,然后执行Add(3),最后才会执行defer的Add(2),因此选A。
本作品采用《CC 协议》,转载必须注明作者和本文链接
defer只能执行一个函数。defer后是一个链式函数而且defer是一个压栈的输入,所以立即执行了 tt.Add(1) 然后执行 tt.Add(3) 最后执行的 defer tt.Add(2)