Программа создаёт срез s с длиной 0 и ёмкостью 3, затем добавляет в него 5 элементов (0,1,2,3,4). При добавлении элементов срез автоматически расширяется, если превышается ёмкость.
Что выведет программа при выполнении?
Программа создаёт срез s с длиной 0 и ёмкостью 3, затем добавляет в него 5 элементов (0,1,2,3,4). При добавлении элементов срез автоматически расширяется, если превышается ёмкость.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что выведет программа при выполнении?
package main
import "fmt"
func main() { s := make([]int, 0, 3) m := map[string]int{"a": 1, "b": 2}
for i := 0; i < 5; i++ {
s = append(s, i)
}
fmt.Println(len(s), cap(s))
if v, ok := m["c"]; ok {
fmt.Println(v)
} else {
fmt.Println("нет ключа")
}
}
Ответ
Программа создаёт срез s с длиной 0 и ёмкостью 3, затем добавляет в него 5 элементов (0,1,2,3,4). При добавлении элементов срез автоматически расширяется, если превышается ёмкость.
После цикла:
len(s)будет 5 (число элементов)cap(s)будет 6, так как при превышении ёмкости среза она обычно удваивается (с 3 до 6)
Далее программа пытается получить значение по ключу "c" из мапы m. Такого ключа нет, поэтому ok будет false и выведется "нет ключа".
Итоговый вывод:
5 6
нет ключа