Время работы двух функций с defer и Sleep

ЗадачаMiddle7 минбесплатночто выведет и почему05-t008

main вызывает подряд две функции; каждая делает time.Sleep на 2 секунды и регистрирует по два defer с замером времени — один с аргументом, другой замыканием. В каком порядке и с какими временами будут строки? Какой будет общая продолжительность программы и почему? Можно ли её сократить?

main.gogo
1package main2 3import (4	"fmt"5	"time"6)7 8// 1. Сколько времени займёт эта программа и почему?9// 2. Можно ли что-то улучшить?10 11func main() {12	began := time.Now()13 14	stageA()15	stageB()16 17	fmt.Println("duration: ", time.Since(began))18}19 20func stageA() {21	defer func(t time.Time) {22		fmt.Println("stageA-1: ", t)23	}(time.Now())24 25	time.Sleep(2 * time.Second)26 27	defer func() {28		fmt.Println("stageA-2: ", time.Now())29	}()30}31 32func stageB() {33	defer func() {34		fmt.Println("stageB-1: ", time.Now())35	}()36 37	time.Sleep(2 * time.Second)38 39	defer func(t time.Time) {40		fmt.Println("stageB-2: ", t)41	}(time.Now())42}
⌘ Enter — проверить