-
Что выведет код?
package main import ( "fmt" ) func main() { a := []int{1, 2, 3} fmt.Println(a[:1]) }
- []
- [1]
- [1 2]
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- []
- [1]
- [1 2]
- Код не скомпилируется
- Код запаникует
Объяснение:
Мы получаем слайс с начала массива по элемент с индексом 1 (это второй элемент), но не включаем его. Т.е. на выходе получаем слайс только из первого элемента.
-
Что выведет код?
package main import ( "fmt" ) func main() { a := []int{1, 2, 3} fmt.Println(a[:3]) }
- [1 2]
- [1 2 3]
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- [1 2]
- [1 2 3]
- Код не скомпилируется
- Код запаникует
Объяснение: Мы получаем слайс с начала массива по элемент с индексом 3 (это четвертый элемент), но не включаем его. Т.е. на выходе получаем слайс с такими же границами, как и
a
. -
Что выведет код?
package main import ( "fmt" ) func main() { a := []int{1, 2, 3} fmt.Println(a[:4]) }
- Результат не определен
- [1 2 3]
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- Результат не определен
- [1 2 3]
- Код не скомпилируется
- Код запаникует
Объяснение:
Мы получаем слайс с начала массива по элемент с индексом 4 (это пятый элемент), но не включаем его. Поскольку у слайса нет четвертого элемента, то мы пытаемся взять слайс за границей доступной памяти. Такая операция приведет к панике
-
Что выведет код?
package main import ( "fmt" ) func main() { a := []int{1, 2, 3} fmt.Println(a[1:2:3]) }
- []
- [1]
- [2]
- [1 2]
- [2 3]
- [1 2 3]
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- []
- [1]
- [2]
- [1 2]
- [2 3]
- [1 2 3]
- Код не скомпилируется
- Код запаникует
Объяснение:
Получаем слайс с элемента с индексом 1 включительно (второй элемент) до элемента с индексом 2 исключительно (третий элемент) и корректной границей
max
по вместимости (граница не выходит за пределы доступной памяти). -
Что выведет код?
package main import ( "fmt" ) func main() { a := []int{1, 2, 3} fmt.Println(a[1::3]) }
- []
- [1]
- [2]
- [1 2]
- [2 3]
- [1 2 3]
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- []
- [1]
- [2]
- [1 2]
- [2 3]
- [1 2 3]
- Код не скомпилируется
- Код запаникует
Объяснение:
Задание границы
max
требует обязательного указания верхней границыhigh
нового слайса. Поэтому данный синтаксис является некорректным -
Что выведет код?
package main import ( "fmt" ) func main() { a := []int{1, 2, 3} fmt.Println(a[:2:3]) }
- []
- [1]
- [2]
- [1 2]
- [2 3]
- [1 2 3]
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- []
- [1]
- [2]
- [1 2]
- [2 3]
- [1 2 3]
- Код не скомпилируется
- Код запаникует
Объяснение:
Получаем слайс от начала до элемента с индексом 2 (третий элемент), не включая его. При этом указываем корректное ограничение вместимости
max
. -
Что выведет код?
package main import ( "fmt" ) func main() { a := []int{1, 2, 3} fmt.Println(a[1:2:]) }
- []
- [1]
- [2]
- [1 2]
- [2 3]
- [1 2 3]
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- []
- [1]
- [2]
- [1 2]
- [2 3]
- [1 2 3]
- Код не скомпилируется
- Код запаникует
Объяснение:
Данный синтаксис слайса является некорректным. Если требуется опустить значение
max
, то не стоит указывать второе многоточие. -
Что выведет код?
package main import ( "fmt" ) func main() { a := []int{1, 2, 3} fmt.Println(a[1:]) }
- []
- [1]
- [2]
- [1 2]
- [2 3]
- [1 2 3]
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- []
- [1]
- [2]
- [1 2]
- [2 3]
- [1 2 3]
- Код не скомпилируется
- Код запаникует
Объяснение:
Получаем слайс начиная с элемента с индексом 1 включительно (второй элемент) до конца слайса.
-
Что выведет код?
package main import ( "fmt" ) func main() { a := []int{1, 2, 3} fmt.Println(a[:]) }
- []
- [1]
- [2]
- [1 2]
- [2 3]
- [1 2 3]
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- []
- [1]
- [2]
- [1 2]
- [2 3]
- [1 2 3]
- Код не скомпилируется
- Код запаникует
Объяснение:
Когда опущено значение
low
в синтаксисе слайса, вместо него берется 0.Когда опущено значение
high
в синтаксисе слайса, вместо него берется длина массива/слайса.В данном случае получаем слайс начиная с элемента с индексом 0 включительно (первый элемент) до конца слайса. Т.е. получаем аналогичный слайс.
-
Что выведет код?
package main import ( "fmt" ) func main() { a := []int{} a = append(a, 1) a = append(a, 2) a = append(a, 3) add(a) fmt.Println(a) } func add(a []int) { a = append(a, 4) }
- [1 2 3]
- [1 2 3 4]
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- [1 2 3]
- [1 2 3 4]
- Код не скомпилируется
- Код запаникует
Объяснение:
Вместимость слайса при передаче в функцию
add
равна 4 при длине 3.При попытке добавления в конец слайса не происходит реаллокации слайса. Поэтому мы записываем 4 в конец массива, на который ссылается исходный слайс
a
.Но как мы помним, слайс состоит из ссылки на адрес памяти, а также
len
иcap
. После выхода из функцииadd
уничтожается копия слайсаa
с длиной 4.Как итог, в значении
a
остается слайс с длиной3
и вместимостью4
. Несмотря на то, что функцияadd
поменяла четвертый элемент массива, на который ссылается слайсa
, на 4, будут выведены только первый три значения -
Что выведет код?
package main import ( "fmt" ) func main() { var a []int a = append(a, 1) fmt.Println(a) }
- [1]
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- [1]
- Код не скомпилируется
- Код запаникует
Объяснение:
Zero-value для
[]int
-nil
.nil
ведет себя ровно так же, как и слайс нулевой длины. В частности, к нему можно без ошибок добавлять элементы функциейappend
-
Что выведет код?
package main import "fmt" func main() { a := [2]int{0, 0} if a == nil { fmt.Println("true") } else { fmt.Println("false") } }
- true
- false
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- true
- false
- Код не скомпилируется
- Код запаникует
Объяснение:
nil
- некорректное значение для массивов. Поэтому попытка сравнения массива сnil
не пройдет компиляцию -
Что выведет код?
package main import "fmt" func main() { a := [2]int{0, 0} if a == [2]int{} { fmt.Println("true") } else { fmt.Println("false") } }
- true
- false
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- true
- false
- Код не скомпилируется
- Код запаникует
Объяснение:
Массивы сравниваются по значению.
В конструкции
[2]int{}
необъявленные элементы заполняются нулями. Т.е.[2]int{0}
,[2]int{0, 0}
и[2]int{}
- это одно и то же. -
Что выведет код?
package main import "fmt" func main() { a := [2]int{1, 2} if a == [2]int{} { fmt.Println("true") } else { fmt.Println("false") } }
- true
- false
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- true
- false
- Код не скомпилируется
- Код запаникует
Объяснение:
Массивы сравниваются по значению.
В конструкции
[2]int{}
необъявленные элементы заполняются нулями. Т.е.[2]int{0}
,[2]int{0, 0}
и[2]int{}
- это одно и то же. -
Что выведет код?
package main import "fmt" func main() { a := [0]int{} fmt.Println(a) }
- []
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- []
- Код не скомпилируется
- Код запаникует
Объяснение:
Массив может иметь нулевой размер. Это вполне допустимая ситуация
-
Что выведет код?
package main import "fmt" func main() { a := []int{} if a == nil { fmt.Println("true") } else { fmt.Println("false") } }
- true
- false
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- true
- false
- Код не скомпилируется
- Код запаникует
Объяснение:
Слайс можно сравнить с
nil
. Однако[]int{}
- это неnil
-слайс, а просто пустой слайс. Поэтому он не равенnil
, хотя в остальном он ведет себя абсолютно аналогично. -
Что выведет код?
package main import "fmt" func main() { a := []int{} if a == []int{} { fmt.Println("true") } else { fmt.Println("false") } }
- true
- false
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- true
- false
- Код не скомпилируется
- Код запаникует
Объяснение:
Слайс можно сравнить только с
nil
. Сравнивать слайсы друг с другом - недопустимая операция. -
Что выведет код?
package main import "fmt" func main() { m := map[[2]int]int{ {1, 2}: 3, } fmt.Println(m[[2]int{1, 2}]) }
- 0
- 3
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- 0
- 3
- Код не скомпилируется
- Код запаникует
Объяснение:
Массив - корректный тип для ключа
map
, поскольку он поддерживает сравнение на равенство. -
Что выведет код?
package main import "fmt" func main() { m := map[[]int]int{ {1, 2}: 3, } fmt.Println(m[[]int{1, 2}]) }
- 0
- 3
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- 0
- 3
- Код не скомпилируется
- Код запаникует
Объяснение:
Слайс - недопустимый тип для ключа
map
, поскольку он не поддерживает сравнение на равенство. -
Что выведет код?
package main import "fmt" func main() { m := map[string]int{} if m == nil { fmt.Println("true") } else { fmt.Println("false") } }
- true
- false
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- true
- false
- Код не скомпилируется
- Код запаникует
Объяснение:
map
можно сравнить сnil
. Однакоmap[string]int{}
- это неnil
-map -
Что выведет код?
package main import "fmt" func main() { m := map[string]int{} if m == map[string]int{} { fmt.Println("true") } else { fmt.Println("false") } }
- true
- false
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- true
- false
- Код не скомпилируется
- Код запаникует
Объяснение:
map
можно сравнить только сnil
. Сравниватьmap
друг с другом - недопустимая операция. -
Что выведет код?
package main import "fmt" func main() { m := map[string]int{} m["one"] = 1 fmt.Println(m) }
- map[one:1]
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- map[one:1]
- Код не скомпилируется
- Код запаникует
Объяснение:
Корректно инициализированный
map
автоматически расширяется при записи новых значений. -
Что выведет код?
package main import "fmt" func main() { var m map[string]int m["one"] = 1 fmt.Println(m) }
- map[one:1]
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- map[one:1]
- Код не скомпилируется
- Код запаникует
Объяснение:
Zero-value для
map[string]int
- этоnil
. Попытка записи вnil
-map приведет к паникеpanic: assignment to entry in nil map
-
Что выведет код?
package main import "fmt" func main() { var m map[string]int fmt.Println(m["one"]) }
- 0
- Код не скомпилируется
- Код запаникует
Ответ с пояснением
- 0
- Код не скомпилируется
- Код запаникует
Объяснение:
Zero-value для
map[string]int
- этоnil
. Попытка чтения изnil
-map - вполне допустимая операция. При этом будет прочитано zero-value типаint
- 0.
This repository was archived by the owner on Dec 5, 2021. It is now read-only.