Что выведет код Senior Слайсы и мапы изнутри обновлено
Что выведет Go: range по массиву и по слайсу
Вопрос
Что выведет программа? Go 1.23, в go.mod указано go 1.23. Каждую строку вывода пишите с новой строки.
package main
import "fmt"
func main() {
arr := [3]int{1, 2, 3}
for i, v := range arr {
if i == 0 {
arr[1] = 20
}
fmt.Print(v, " ")
}
fmt.Println()
sl := []int{1, 2, 3}
for i, v := range sl {
if i == 0 {
sl[1] = 20
}
fmt.Print(v, " ")
}
fmt.Println()
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 1 2 3, 1 20 3. Выражение range вычисляется один раз.
Что выведет
1 2 3
1 20 3
Разбор
Выражение range вычисляется один раз. Для массива это копия всего массива, поэтому изменение arr[1] в цикле не видно: печатается 2. Для слайса копируется только заголовок, массив общий, и на второй итерации читается уже 20.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что выведет Go: nil-слайс и пустой слайс
Следующий вопрос
Что выведет Go: append в слайс во время range
Ещё по теме «Слайсы и мапы изнутри»
- Разбить слайс на части по k на Go
- Удаление дубликатов с сохранением порядка на Go
- Группировка анаграмм на Go
- Циклический сдвиг слайса на Go
- Число подмассивов с суммой k на Go
- Топ-k частых слов на Go
- Что выведет Go: append при полной ёмкости
- Что выведет Go: два append в один подслайс