16 вопросов, около 12 минут
Итоговый тест по курсу «Основы Golang»
16 вопросов по основам Go для начинающих с разбором ответов. В конце — какие темы повторить и вывод по вашим ответам: стоит ли продолжать учить Go.
Тест по всему курсу
Проверьте, как усвоился курс: вопросы по всем урокам, а в конце — разбор ошибок и темы, которые стоит повторить.
-
Программу на Go собрали в исполняемый файл. Что нужно, чтобы запустить её на сервере?
Компилятор заранее собирает всё в один файл. На сервере не нужны ни Go, ни исходники — поэтому программы на Go так легко разворачивать.
-
Что выведет fmt.Println("10 * 2")?
Выражение в кавычках — это строка, и она выводится как есть. Чтобы получить 20, кавычки нужно убрать: fmt.Println(10 * 2).
-
Что выведет fmt.Println(10 / 4)?
Оба числа целые, поэтому деление целочисленное и дробная часть отбрасывается. Чтобы получить 2.5, делят дробные числа: 10.0 / 4.
-
Внутри main написано total := 100, и больше total нигде не используется. Что будет?
Неиспользуемая переменная в Go — ошибка, как и лишний импорт. Компилятор не даст собрать программу с мусором.
-
Как в Go повторить действие, пока пользователь не ввёл правильный пароль, если число попыток заранее неизвестно?
В Go один цикл — for. С одним условием он работает как while в других языках: повторяет, пока условие верно.
-
score := 85. В switch без значения идут ветки case score >= 90, case score >= 80 и default. Что выполнится?
switch проверяет ветки сверху вниз и выполняет первую подходящую. 85 не больше 90, но больше 80. После неё switch сам останавливается.
-
Функция объявлена как func parse(s string) (int, error). Как принято её вызывать?
Функция возвращает два значения, и оба нужно принять. Ошибку проверяют сразу после вызова: если она не nil, результатом пользоваться нельзя.
-
Чем обработка ошибок в Go отличается от многих других языков?
В Go нет исключений, которые внезапно обрывают выполнение. Ошибка — значение типа error, и по коду видно, где её проверяют.
-
Что выведет код: s := []int{1, 2}; s = append(s, 3, 4); fmt.Println(len(s))?
append может добавить сразу несколько элементов. Было два, добавили два — длина стала 4.
-
Как узнать, есть ли в map stock ключ "молоко", если значение может быть и нулём?
Для отсутствующего ключа map возвращает нулевое значение, поэтому по одному числу не понять, есть ли ключ. Второе значение ok — true, если ключ есть.
-
Метод Deposit должен увеличивать баланс счёта. Как правильно объявить получатель?
Метод меняет данные, поэтому получатель — указатель *Account. Без звёздочки метод изменил бы копию, и баланс остался бы прежним.
-
Интерфейс Shape требует метод Area() float64. У типа Circle есть такой метод. Что нужно ещё, чтобы Circle можно было передать туда, где ждут Shape?
В Go интерфейсы выполняются неявно. Если у типа есть все методы интерфейса, он уже ему соответствует.
-
В своём пакете вы написали функцию calcTotal. Из main её вызвать не получается. Почему?
Экспорт в Go определяет первая буква. Переименуйте функцию в CalcTotal — и она станет доступна из других пакетов.
-
Какая команда приведёт оформление кода во всём проекте к единому стилю?
go fmt форматирует код по стандарту, а ./... означает текущую папку и все вложенные. Поэтому код на Go выглядит одинаково в любом проекте.
-
В main запустили три горутины через go и сразу завершили программу, ничего не ожидая. Что, скорее всего, случится?
Когда main заканчивается, программа завершается целиком. Чтобы дождаться горутин, используют sync.WaitGroup или принимают их результаты из канала.
-
Программа упала с сообщением all goroutines are asleep - deadlock!. Что это значит?
Например, main отправляет в канал, а принять некому. Go видит, что ни одна горутина не может продолжить, и останавливает программу.
А теперь о вас
Три вопроса без правильных ответов — о том, подходит ли вам это направление.
Что дальше
Если тема зацепила, продолжить можно так.