count будет 1000: вызовы последовательные. Println не подставляет значения вместо %v, поэтому форматная строка печатается буквально.
Какой текст появится в консоли при запуске программы №19
count будет 1000: вызовы последовательные. Println не подставляет значения вместо %v, поэтому форматная строка печатается буквально.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Укажите, что именно выведет программа после её выполнения.
import (
"fmt"
"time"
)
const numRequests = 1000
var count int
func networkRequest() {
time.Sleep(time.Millisecond)
count++;
}
func main() {
defer timer() ()
for i := 0 ; i < numRequests; i++ {
networkRequest()
}
}
func timer() func () {
start :=time.Now()
return func(){
fmt.Println("count %v took %v\n", count, time.Since(start))
}
}
Ответ
count будет 1000: вызовы последовательные. Println не подставляет значения вместо %v, поэтому форматная строка печатается буквально.
Выражение defer timer()() сразу запускает timer, фиксирующий время, а возвращённую функцию откладывает до выхода main. Тогда count уже равен 1000. Суммарная задержка не меньше примерно секунды; точная длительность зависит от выполнения.
В строке формата содержится перевод строки, после него Println выведет через пробелы число и длительность. Для задуманной одной строки нужен fmt.Printf("count %v took %v\n", count, time.Since(start)). Гонок здесь нет, пока networkRequest не запускается параллельно.