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 协议》,转载必须注明作者和本文链接
微信公众号:福大大架构师每日一题。最新面试题,涉及golang,rust,mysql,redis,云原生,算法,分布式,网络,操作系统。
讨论数量: 1

defer只能执行一个函数。defer后是一个链式函数而且defer是一个压栈的输入,所以立即执行了 tt.Add(1) 然后执行 tt.Add(3) 最后执行的 defer tt.Add(2)

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
471
粉丝
21
喜欢
37
收藏
22
排名:457
访问:1.9 万
私信
所有博文
社区赞助商