package
0.0.0-20241220153043-cbee1828b161
Repository: https://github.com/alivewel/go.git
Documentation: pkg.go.dev
# README
Что выведет программа?
func main() {
slice := make([]int, 0, 1000)
slice = append(slice, 1, 2, 3)
fmt.Println(slice) // ???
process(slice)
fmt.Println(slice) // ???
fmt.Println(slice[:6]) // ???
}
func process(slice []int) {
slice = append(slice, 4, 5, 6)
}
Вывод программы
-
Первый вывод:
fmt.Println(slice)
- Вывод:
[1 2 3]
- Изначально в слайс добавляются элементы 1, 2 и 3.
- Вывод:
-
Второй вывод:
fmt.Println(slice)
послеprocess(slice)
- Вывод:
[1 2 3]
- В функции process(slice) создается новый слайс с добавлением элементов 4, 5 и 6. Однако это изменение не влияет на оригинальный слайс в main, так как слайсы передаются по значению, где копируются длина и емкость, но базовый массив передается по указателю. Поэтому при выходе из функции process длина оригинального слайса остается прежней.
- Вывод:
-
Третий вывод:
fmt.Println(slice[:6])
- Вывод:
[1 2 3 4 5 6]
- Функция
process(slice)
изменяет оригинальный слайс, добавленные элементы 4, 5 и 6 все же записываются в подлежащий массив, так как у слайса достаточно емкости (1000). Указав явно длинуslice[:6]
мы можем включить эти элементы в вывод.
- Вывод: