Привет! Сегодня продолжаем серию мини-квизов в нашем блоге. Этот выпуск (предыдущий здесь) будет посвящен языку Go — будем считать, что это разминка в преддверие GopherCon Russia 2018 (кстати, у нас на этой конференции будет стенд, и мы планируем несколько интересных активностей).
Под катом — семь вопросов и пара пасхалок. Ответы на вопросы выложим апдейтом к посту в понедельник, 26.02. Если будете решать — кладите ответы под спойлер, чтобы не портить другим фана.
Enjoy!
UPD: пост обновлён, теперь ответы внутри!

1. Что выведет этот код?
package main import ( "fmt" ) func add(arr []int, v int) { arr = append(arr, v) } func main() { arr := make([]int, 0, 100000) fmt.Printf("%v %p\n", arr, &arr) add(arr, 10) fmt.Printf("%v %p\n", arr, &arr) }
Варианты ответов:
- Пустой массив до вызова add, массив из 1 элемента после. Адреса не совпадают.
- Оба раза пустой массив. Адреса совпадают.
- Пустой массив до вызова add, массив из 1 элемента после. Адреса совпадают.
- Оба раза пустой массив. Адреса не совпадают.
Оба раза пустой массив. Адреса совпадают.
2. Что выведет этот код?
package main import "fmt" func main() { numbers := [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} s1 := numbers[:5:8] fmt.Println(s1) s2 := numbers[::4] fmt.Println(s2) }
Варианты ответов:
- Массив чисел от 0 до 5, затем массив чисел от 0 до 9
- Массив чисел от 0 до 4, затем массив чисел от 0 до 9
- Не скомпилируется
- Массив чисел от 0 до 4, затем пустой массив.
Не скомпилируется
3. Допустим у вас следующая иерархия:
src/ package_1/ p1_a.go p1_b.go package_2/ p2_a.go package_3/ p3_sh.go p3_bash.go p3_zsh.go
Каждый модуль верхнего уровня импортирует модуль нижнего уровня т.е. package_1 импортирует package_2, а тот в свою очередь package_3. В каждом файле объявлена init-функция след. содержания:
func init () { fmt.Println(<название файла, например: p1_a.go>) }
Что будет выведено на экран?
Варианты ответов:
- Ошибка компиляции: More than one file in package declares init function
- Порядок не определён
- p1_a.go
p1_b.go
p2_a.go
p3_a.go
p3_bash.go
p3_sh.go
p3_zsh.go - Функции будут вызваны в случайном порядке, но в соответствии с иерархии начиная с нижнего модуля (package_3) и заканчивая верхним (package_1)
Функции будут вызваны в случайном порядке, но в соответствии с иерархии начиная с нижнего модуля (package_3) и заканчивая верхним (package_1)
4. Чему будут равны константы:
const ( _ = iota Avito OLX LetGo Craiglist = iota eBay )
Варианты ответов:
- 1,2,3,4,5
- Ошибка компиляции: incorrect constant declaration: iota used twice
- 0, 1, 2, 3, 4
- 1,2,3,0, 4
1,2,3,4,5
5. Опытный программист Роб решил добавить модуль для парсинга данных в стандартную библиотеку своего языка. Одним из модулей парсера будет конечный автомат, войдя в поток, Роб набросал следующий код, что произойдёт в момент первой компиляции?
package main type state func(x int) state func start(x int) state { if x == 0 { return middle } else { return end } } func middle(_ int) state { return end } func end(_ int) state { return start } func main() { state := start(0) state = state(1) state = state(2) }
Варианты ответов:
- Ошибка в коде: произойдёт ошибка во время компиляции "type 'state' used in self declaration"
- В stdout ничего не выведется, но процесс завершится успешно
- Runtime ошибка: возникнет бесконечная рекурсия
В stdout ничего не выведется, но процесс завершится успешно.
6. Каким будет результат выполнения кода?
package main import ( "fmt" ) func test() (x int) { defer func () { x++ } () x = 1 return x } func main() { fmt.Println(test()) }
Варианты ответов:
- 1
- 2
- Compile error
2
7. Молодой китайский программист Jian Yang решил освоить Go для своего нового гео-стартапа. Начав с обычного Hello World, он решил слегка его модифицировать, дабы освоить конструкцию range… Каким будет результат выполнения кода?
package main import ( "fmt" ) func main() { var rc, bc int str := "Hello 世界" for _ = range str { rc++ } for _ = range []byte(str){ bc++ } fmt.Println(rc, bc) }
Варианты ответов:
- 8 8
- 8 12
- 8 14
- 8 16
8 12
Желаем хорошего дня и ждём ваших ответов в комментариях. Следующий выпуск Avito Quiz планируем сделать по PHP.

