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。

在这里插入图片描述