GO Go  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Обобщения Go

Разбирает параметры типов, ограничения, приближённые типы через `~`, вывод аргументов и случаи, где интерфейс или обычная функция лучше обобщения. В тесте 25 вопросов, из них 15 требуют чтения кода, команд или диагностических фрагментов. Задания опираются на устойчивые правила современного Go; если поведение зависит от версии, это оговорено в самом вопросе.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат и результаты по 5 тематическим шкалам с объяснениями и практическими рекомендациями.
Вопрос 1 из 25
В рабочем примере по теме «Параметры типов» важно отделить гарантию от догадки. Как изменится состояние программы после этого фрагмента?
GoПараметры типов: результат выполнения
// Фрагмент для трассировки.
package main
func First[T any](xs []T) T { return xs[0] }
func main(){ _=First([]string{"go"}) }
Вопрос 2 из 25
Фрагмент относится к теме «Параметры типов». Какое замечание на ревью будет наиболее точным?
GoПараметры типов: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
func First[T any](xs []T) T { return xs[0] }
func main(){ _=First([]string{"go"}) }
Вопрос 3 из 25
На ревью разбирают тему «Параметры типов». Какое правило важнее случайных деталей конкретного запуска?
GoПараметры типов: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
func First[T any](xs []T) T { return xs[0] }
func main(){ _=First([]string{"go"}) }
Вопрос 4 из 25
В разделе «Параметры типов» показан конкретный случай. Где корректный фрагмент легко становится ошибочным?
Вопрос 5 из 25
Команда проверяет решение по теме «Параметры типов». Что учитывать при выборе этого приёма для публичного API?
Вопрос 6 из 25
Фрагмент относится к теме «Ограничения типов». Какой результат даст этот код на поддерживаемой реализации Go?
GoОграничения типов: результат выполнения
// Фрагмент для трассировки.
package main
func Has[K comparable,V any](m map[K]V,k K) bool { _,ok:=m[k]; return ok }
func main(){ _=Has(map[int]string{1:"x"},1) }
Вопрос 7 из 25
На ревью разбирают тему «Ограничения типов». Что нужно поменять, чтобы граничный случай не превратился в сбой?
GoОграничения типов: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
func Has[K comparable,V any](m map[K]V,k K) bool { _,ok:=m[k]; return ok }
func main(){ _=Has(map[int]string{1:"x"},1) }
Вопрос 8 из 25
В разделе «Ограничения типов» показан конкретный случай. Какое свойство конструкции определяет её поведение?
GoОграничения типов: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
func Has[K comparable,V any](m map[K]V,k K) bool { _,ok:=m[k]; return ok }
func main(){ _=Has(map[int]string{1:"x"},1) }
Вопрос 9 из 25
Команда проверяет решение по теме «Ограничения типов». Что стоит проверить до переноса решения в общий компонент?
Вопрос 10 из 25
Перед публикацией кода по теме «Ограничения типов» нужно уточнить контракт. Как точнее всего описать пользу и цену этого решения?
Вопрос 11 из 25
На ревью разбирают тему «Приближённый базовый тип ~T». К какому результату приводит показанная конструкция?
GoПриближённый базовый тип ~T: результат выполнения
// Фрагмент для трассировки.
package main
type Integer interface{ ~int | ~int64 }
type Age int
func Twice[T Integer](x T) T { return x+x }
func main(){ _=Twice(Age(3)) }
Вопрос 12 из 25
В разделе «Приближённый базовый тип ~T» показан конкретный случай. Какую правку стоит предложить на ревью, сохранив назначение кода?
GoПриближённый базовый тип ~T: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
type Integer interface{ ~int | ~int64 }
type Age int
func Twice[T Integer](x T) T { return x+x }
func main(){ _=Twice(Age(3)) }
Вопрос 13 из 25
Команда проверяет решение по теме «Приближённый базовый тип ~T». На какой контракт языка или стандартной библиотеки здесь нужно опереться?
GoПриближённый базовый тип ~T: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
type Integer interface{ ~int | ~int64 }
type Age int
func Twice[T Integer](x T) T { return x+x }
func main(){ _=Twice(Age(3)) }
Вопрос 14 из 25
Перед публикацией кода по теме «Приближённый базовый тип ~T» нужно уточнить контракт. Какое ограничение опаснее всего пропустить?
Вопрос 15 из 25
В рабочем примере по теме «Приближённый базовый тип ~T» важно отделить гарантию от догадки. Какой вывод о сопровождении решения наиболее взвешенный?
Вопрос 16 из 25
В разделе «Практические границы» показан конкретный случай. Как завершится показанный фрагмент при указанных входных данных?
GoПрактические границы: результат выполнения
// Фрагмент для трассировки.
package main
func Clone[T any](src []T) []T { return append([]T(nil),src...) }
func main(){ _=Clone([]int{1,2}) }
Вопрос 17 из 25
Команда проверяет решение по теме «Практические границы». Что здесь следует изменить прежде всего?
GoПрактические границы: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
func Clone[T any](src []T) []T { return append([]T(nil),src...) }
func main(){ _=Clone([]int{1,2}) }
Вопрос 18 из 25
Перед публикацией кода по теме «Практические границы» нужно уточнить контракт. Какое правило отделяет верный разбор от правдоподобной догадки?
GoПрактические границы: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
func Clone[T any](src []T) []T { return append([]T(nil),src...) }
func main(){ _=Clone([]int{1,2}) }
Вопрос 19 из 25
В рабочем примере по теме «Практические границы» важно отделить гарантию от догадки. Какой крайний случай обязан попасть в тесты?
Вопрос 20 из 25
Фрагмент относится к теме «Практические границы». Какой выбор лучше отражает баланс простоты и контроля?
Вопрос 21 из 25
Команда проверяет решение по теме «Тестирование и наблюдаемость». Как изменится состояние программы после этого фрагмента?
GoТестирование и наблюдаемость: результат выполнения
// Фрагмент для трассировки.
package sample
import "testing"
type Age int
func TestTwice(t *testing.T){ if Twice(Age(2))!=4{t.Fatal()} }
func Twice[T ~int|~int64](x T)T{return x+x}
Вопрос 22 из 25
Перед публикацией кода по теме «Тестирование и наблюдаемость» нужно уточнить контракт. Какое замечание на ревью будет наиболее точным?
GoТестирование и наблюдаемость: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package sample
import "testing"
type Age int
func TestTwice(t *testing.T){ if Twice(Age(2))!=4{t.Fatal()} }
func Twice[T ~int|~int64](x T)T{return x+x}
Вопрос 23 из 25
В рабочем примере по теме «Тестирование и наблюдаемость» важно отделить гарантию от догадки. Какое правило важнее случайных деталей конкретного запуска?
GoТестирование и наблюдаемость: проверка контракта
// Определите правило Go, которое объясняет результат.
package sample
import "testing"
type Age int
func TestTwice(t *testing.T){ if Twice(Age(2))!=4{t.Fatal()} }
func Twice[T ~int|~int64](x T)T{return x+x}
Вопрос 24 из 25
Фрагмент относится к теме «Тестирование и наблюдаемость». Где корректный фрагмент легко становится ошибочным?
Вопрос 25 из 25
На ревью разбирают тему «Тестирование и наблюдаемость». Что учитывать при выборе этого приёма для публичного API?

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу