Go онлайн: редактор и компилятор для собеседований

Пишите и запускайте программы на Go прямо в браузере, без установки тулчейна: код компилируется на сервере, ошибки и вывод видны сразу. Для собеседования откройте общую сессию и отправьте ссылку кандидату. Бесплатно и без регистрации.

Открыть редактор Go
Бесплатно, без регистрацииКак провести лайвкодинг-собеседование на GoСовместный редактор кода: сравнение сервисов

Пример кода

package main

import (
	"fmt"
	"sort"
	"strings"
)

func main() {
	words := strings.Fields("go is fun and go is fast")
	count := map[string]int{}
	for _, w := range words {
		count[w]++
	}
	keys := make([]string, 0, len(count))
	for k := range count {
		keys = append(keys, k)
	}
	sort.Strings(keys)
	for _, k := range keys {
		fmt.Printf("%s=%d ", k, count[k])
	}
	fmt.Println()
}

Вывод

and=1 fast=1 fun=1 go=2 is=2

Что умеет редактор

  • Go 1.16: программа компилируется и выполняется на сервере в изолированной песочнице, ошибки компиляции и вывод видят все участники.
  • Стандартная библиотека под рукой: strings, sort, strconv, container/heap, горутины и каналы.
  • Автотесты: если у задачи есть юнит-тесты, их можно запустить из сессии и увидеть, сколько прошло.
  • Совместное редактирование в реальном времени: до 5 участников в одной сессии, правки и курсоры видны сразу.
  • Банк задач открыт без входа. После бесплатного входа — свои задачи, режим интервью с таймерами, оценка кандидата и история собеседований.

Как провести собеседование

  1. Нажмите «Провести собеседование» — сессия создастся с примером программы, его можно заменить своей задачей.
  2. Опишите условие в Markdown и отправьте ссылку кандидату: регистрация ему не нужна.
  3. Попросите кандидата проверять решение вызовами из main и выводом через fmt. Входные данные задавайте в коде или в поле «Ввод (stdin)» над выводом — его видят все участники.

Типичные задачи на собеседовании

  • Посчитать частоту слов через map и вывести их в стабильном порядке: почему порядок обхода map в Go случаен.
  • Запустить несколько горутин, собрать результаты через канал и дождаться их с sync.WaitGroup.
  • Написать пул воркеров с ограничением на число одновременных задач.
  • Реализовать стек и очередь на срезах и объяснить, когда append выделяет новую память.
  • Обработать ошибки идиоматично: вернуть error, обернуть его через fmt.Errorf и проверить через errors.Is.
  • Найти k самых частых элементов с помощью container/heap.

Задачи на Go с проверкой онлайн

Ограничения

  • Это Go 1.16: дженериков ещё нет, они появились в Go 1.18. Пишите функции для конкретных типов или через interface{}.
  • Доступна только стандартная библиотека: сторонние модули не скачиваются.
  • Сборка и запуск вместе ограничены 3 секундами и 64 КБ вывода: go run собирает программу в том же запуске.

Частые вопросы

Какая версия Go используется?
Go 1.16. Программа компилируется и запускается на сервере, поэтому результат одинаков у всех участников.
Можно ли использовать дженерики?
Нет: дженерики появились в Go 1.18, а здесь Go 1.16. Для задач собеседования хватает конкретных типов, срезов и map.
Работают ли горутины и каналы?
Да, это обычная программа на Go. Только помните, что один запуск ограничен 3 секундами: дождитесь горутин через sync.WaitGroup или канал, иначе main завершится раньше.
Есть ли автотесты для Go?
Да. Если у задачи есть юнит-тесты, их можно запустить из сессии. Свои задачи с тестами доступны после бесплатного входа. Задачи банка с пометкой «Любой язык» открываются с заготовкой и тестами на Go.
Нужна ли регистрация?
Нет. Редактор открывается сразу, а кандидату для собеседования достаточно ссылки и имени. Банк задач тоже открыт без входа. Вход нужен для своих задач, режима интервью и истории.

Редактор для других языков