Сначала нужно исправить constSlice на contSlice. Затем срез останется длины 0, а map будет содержать единственный ключ struct{}{} со значением B.
Какой вывод получит консоль при запуске программы №54
Сначала нужно исправить constSlice на contSlice. Затем срез останется длины 0, а map будет содержать единственный ключ struct{}{} со значением B.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какой текст будет выведен в консоль после выполнения приведённого ниже кода на Go:
func exampleB() {
contSlice :=make([]string, 0 ,2)
contMap := map[struct{}]string{}
exampleB1(constSlice)
exampleB2(contMap)
fmt.Printf("slice: %#v\n", contSlice)
fmt.Printf("slice: %#v\n", contMap)
}
func exampleB1(cont[]string){
cont = append(cont, "A")
cont = append(cont, "B")
}
func exampleB2(cont map[struct{}]string){
cont[struct{}{}] = "A"
cont[struct{}{}] = "B"
}
Ответ
Сначала нужно исправить constSlice на contSlice. Затем срез останется длины 0, а map будет содержать единственный ключ struct{}{} со значением B.
Оба append помещают A и B в общий массив, но меняют длину лишь локального параметра exampleB1. Поэтому %#v для исходного среза покажет []string{}.
В map все значения пустого struct{} равны и представляют один ключ. Вторая запись заменяет A на B; %#v показывает map с одной такой парой. Подпись slice у второго Printf вводит в заблуждение, но не меняет результат. Функцию exampleB требуется вызвать; само объявление не выполняет печать.