GO Go  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Проектирование API и пакетов Go

Проверяет минимальные интерфейсы, совместимые ошибки, эволюцию публичного API, документацию и поведение пакета в конкурентном приложении. В тесте 30 вопросов, из них 18 требуют чтения кода, команд или диагностических фрагментов. Задания опираются на устойчивые правила современного Go; если поведение зависит от версии, это оговорено в самом вопросе.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат и результаты по 6 тематическим шкалам с объяснениями и практическими рекомендациями.
Вопрос 1 из 30
Фрагмент относится к теме «Минимальные интерфейсы». Что именно произойдёт при выполнении показанного фрагмента?
GoМинимальные интерфейсы: результат выполнения
// Фрагмент для трассировки.
package main
type Getter interface{Get(string)([]byte,error)}
func load(g Getter,k string)([]byte,error){return g.Get(k)}
func main(){}
Вопрос 2 из 30
На ревью разбирают тему «Минимальные интерфейсы». Как исправить основной риск без ненужной перестройки решения?
GoМинимальные интерфейсы: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
type Getter interface{Get(string)([]byte,error)}
func load(g Getter,k string)([]byte,error){return g.Get(k)}
func main(){}
Вопрос 3 из 30
В разделе «Минимальные интерфейсы» показан конкретный случай. Какой принцип позволяет вывести ответ без запуска программы?
GoМинимальные интерфейсы: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
type Getter interface{Get(string)([]byte,error)}
func load(g Getter,k string)([]byte,error){return g.Get(k)}
func main(){}
Вопрос 4 из 30
Команда проверяет решение по теме «Минимальные интерфейсы». Какой контрпример разрушит слишком широкое толкование правила?
Вопрос 5 из 30
Перед публикацией кода по теме «Минимальные интерфейсы» нужно уточнить контракт. Что важно учесть помимо формальной корректности?
Вопрос 6 из 30
На ревью разбирают тему «Ошибки». Какое описание результата совпадает с правилами Go?
GoОшибки: результат выполнения
// Фрагмент для трассировки.
package main
import("errors";"fmt")
var ErrNotFound=errors.New("not found")
func get()error{return fmt.Errorf("user 7: %w",ErrNotFound)}
func main(){_=errors.Is(get(),ErrNotFound)}
Вопрос 7 из 30
В разделе «Ошибки» показан конкретный случай. Какая правка устраняет причину, а не маскирует её проявление?
GoОшибки: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
import("errors";"fmt")
var ErrNotFound=errors.New("not found")
func get()error{return fmt.Errorf("user 7: %w",ErrNotFound)}
func main(){_=errors.Is(get(),ErrNotFound)}
Вопрос 8 из 30
Команда проверяет решение по теме «Ошибки». Что именно гарантирует Go в этой ситуации?
GoОшибки: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
import("errors";"fmt")
var ErrNotFound=errors.New("not found")
func get()error{return fmt.Errorf("user 7: %w",ErrNotFound)}
func main(){_=errors.Is(get(),ErrNotFound)}
Вопрос 9 из 30
Перед публикацией кода по теме «Ошибки» нужно уточнить контракт. Что нельзя автоматически переносить на похожий код?
Вопрос 10 из 30
В рабочем примере по теме «Ошибки» важно отделить гарантию от догадки. Как оценить этот подход для производственного кода?
Вопрос 11 из 30
В разделе «Совместимость» показан конкретный случай. Какой итог можно предсказать без пробного запуска?
GoСовместимость: результат выполнения
// Фрагмент для трассировки.
package main
type Option func(*Client)
type Client struct{timeout int}
func New(opts ...Option)*Client{c:=&Client{};for _,o:=range opts{o(c)};return c}
func main(){}
Вопрос 12 из 30
Команда проверяет решение по теме «Совместимость». Как изменить решение, не ломая его исходную задачу?
GoСовместимость: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
type Option func(*Client)
type Client struct{timeout int}
func New(opts ...Option)*Client{c:=&Client{};for _,o:=range opts{o(c)};return c}
func main(){}
Вопрос 13 из 30
Перед публикацией кода по теме «Совместимость» нужно уточнить контракт. Какое утверждение остаётся верным на всех поддерживаемых платформах?
GoСовместимость: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
type Option func(*Client)
type Client struct{timeout int}
func New(opts ...Option)*Client{c:=&Client{};for _,o:=range opts{o(c)};return c}
func main(){}
Вопрос 14 из 30
В рабочем примере по теме «Совместимость» важно отделить гарантию от догадки. Какое условие нельзя считать выполненным по умолчанию?
Вопрос 15 из 30
Фрагмент относится к теме «Совместимость». Какой вариант честно называет и преимущество, и издержку?
Вопрос 16 из 30
Команда проверяет решение по теме «Документирование». Как точнее всего описать выполнение фрагмента?
GoДокументирование: результат выполнения
// Фрагмент для трассировки.
package client
// Client безопасен для одновременного использования несколькими горутинами.
type Client struct{}
// Close освобождает ресурсы; после Close новые вызовы возвращают ErrClosed.
func(*Client)Close()error{return nil}
Вопрос 17 из 30
Перед публикацией кода по теме «Документирование» нужно уточнить контракт. Какая доработка делает поведение явным для вызывающего кода?
GoДокументирование: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package client
// Client безопасен для одновременного использования несколькими горутинами.
type Client struct{}
// Close освобождает ресурсы; после Close новые вызовы возвращают ErrClosed.
func(*Client)Close()error{return nil}
Вопрос 18 из 30
В рабочем примере по теме «Документирование» важно отделить гарантию от догадки. Какое правило достаточно применить для проверки ответа?
GoДокументирование: проверка контракта
// Определите правило Go, которое объясняет результат.
package client
// Client безопасен для одновременного использования несколькими горутинами.
type Client struct{}
// Close освобождает ресурсы; после Close новые вызовы возвращают ErrClosed.
func(*Client)Close()error{return nil}
Вопрос 19 из 30
Фрагмент относится к теме «Документирование». Какой граничный случай нужно проверить отдельно?
Вопрос 20 из 30
На ревью разбирают тему «Документирование». Какой инженерный компромисс здесь действительно существует?
Вопрос 21 из 30
Перед публикацией кода по теме «Тестирование и наблюдаемость» нужно уточнить контракт. Что именно произойдёт при выполнении показанного фрагмента?
GoТестирование и наблюдаемость: результат выполнения
// Фрагмент для трассировки.
package client_test
import("fmt";"example.com/client")
func Example(){
    c:=client.New()
    fmt.Println(c!=nil)
    // Output: true
}
Вопрос 22 из 30
В рабочем примере по теме «Тестирование и наблюдаемость» важно отделить гарантию от догадки. Как исправить основной риск без ненужной перестройки решения?
GoТестирование и наблюдаемость: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package client_test
import("fmt";"example.com/client")
func Example(){
    c:=client.New()
    fmt.Println(c!=nil)
    // Output: true
}
Вопрос 23 из 30
Фрагмент относится к теме «Тестирование и наблюдаемость». Какой принцип позволяет вывести ответ без запуска программы?
GoТестирование и наблюдаемость: проверка контракта
// Определите правило Go, которое объясняет результат.
package client_test
import("fmt";"example.com/client")
func Example(){
    c:=client.New()
    fmt.Println(c!=nil)
    // Output: true
}
Вопрос 24 из 30
На ревью разбирают тему «Тестирование и наблюдаемость». Какой контрпример разрушит слишком широкое толкование правила?
Вопрос 25 из 30
В разделе «Тестирование и наблюдаемость» показан конкретный случай. Что важно учесть помимо формальной корректности?
Вопрос 26 из 30
В рабочем примере по теме «Конкурентность и эксплуатация» важно отделить гарантию от догадки. Какое описание результата совпадает с правилами Go?
GoКонкурентность и эксплуатация: результат выполнения
// Фрагмент для трассировки.
package main
import "sync"
type Worker struct{once sync.Once;stop chan struct{}}
func(w *Worker)Close(){w.once.Do(func(){close(w.stop)})}
func main(){}
Вопрос 27 из 30
Фрагмент относится к теме «Конкурентность и эксплуатация». Какая правка устраняет причину, а не маскирует её проявление?
GoКонкурентность и эксплуатация: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
import "sync"
type Worker struct{once sync.Once;stop chan struct{}}
func(w *Worker)Close(){w.once.Do(func(){close(w.stop)})}
func main(){}
Вопрос 28 из 30
На ревью разбирают тему «Конкурентность и эксплуатация». Что именно гарантирует Go в этой ситуации?
GoКонкурентность и эксплуатация: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
import "sync"
type Worker struct{once sync.Once;stop chan struct{}}
func(w *Worker)Close(){w.once.Do(func(){close(w.stop)})}
func main(){}
Вопрос 29 из 30
В разделе «Конкурентность и эксплуатация» показан конкретный случай. Что нельзя автоматически переносить на похожий код?
Вопрос 30 из 30
Команда проверяет решение по теме «Конкурентность и эксплуатация». Как оценить этот подход для производственного кода?

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

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

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

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