Онлайн компиляторы для языка Go

Иногда вам нужно быстро проверить синтаксис, протестировать идею или показать коллеге пример кода.
Развернуть локальное окружение не всегда удобно.

Онлайн-площадки позволяют компилировать и запускать Go-код прямо в браузере.

Рассмотрим два основных инструмента и определим, когда использовать каждый из них.

Go Playground — официальная песочница

The Go Playground — это официальный онлайн-компилятор от команды Go. Минималистичный интерфейс, никаких излишеств.

// You can edit this code!
// Click here and start typing.
package main

import "fmt"

func main() {
	fmt.Println("Hello, 世界")
}

Как работает:

Go Playground принимает ваш код, проверяет его через go vet, компилирует, линкует и запускает в изолированной среде. Результат возвращается в браузер. Если в коде есть тесты (и нет функции main), он запускает тесты. Бенчмарки не поддерживаются из-за ограничений ресурсов.

Что умеет:

Ограничения:

Когда использовать:

Compiler Explorer (Godbolt) — смотрим под капот

Compiler Explorer (он же Godbolt) — это не совсем playground в классическом понимании. Это инструмент для анализа того, как компилятор превращает код в машинные инструкции.

Выбираете язык Go, компилятор и нужную версию, пишете код — и видите рядом результирующий ассемблер. Любое изменение кода пересобирает бинарник и обновляет ассемблерный вывод.

Пример с площадки

// Type your code here, or load an example.
package p

func square(x int) int {
	return x * x
}

Справа увидишь что-то вроде:

TEXT    command-line-arguments.square(SB), NOSPLIT|NOFRAME|ABIInternal, $0-8
FUNCDATA        $0, gclocals·FzY36IO2mY0y4dZ1+Izd/w==(SB)
FUNCDATA        $1, gclocals·FzY36IO2mY0y4dZ1+Izd/w==(SB)
FUNCDATA        $5, command-line-arguments.square.arginfo1(SB)
FUNCDATA        $6, command-line-arguments.square.argliveinfo(SB)
PCDATA  $3, $1
IMULQ   AX, AX
RET

Зачем это нужно:

Настройки, которые стоит знать:

Когда использовать:

Сравнение инструментов

ИнструментВнешние пакетыАссемблерЛучше всего для
Go Playground✅ (частично)Быстрые примеры, шаринг
Compiler ExplorerАнализ компиляции, оптимизация

Финальные рекомендации

Используй Go Playground, если:

Используй Compiler Explorer, если:

Бонусы

Автоматизация Go Playground:

Можно использовать не только руками, но и автоматически:

curl -X POST https://play.golang.org/share \
  --data-binary 'package main
import "fmt"
func main() {
    fmt.Println("Hello")
}'

Возвращает ID, по которому доступен код: https://go.dev/play/p/{ID}

Пасхалка:

Время в playground всегда начинается с 2009-11-10 23:00:00 UTC потому что это дата публичного запуска Go. Больше об истории языка можно прочитать в статье Go когда появился: подробная история

FAQ

Можно ли запускать долгие программы в онлайн-компиляторах?Нет, все playground-среды ограничивают время выполнения, использование CPU и памяти. Для долгих задач используй локальное окружение или Docker-контейнер.
Безопасно ли вставлять приватный код в онлайн-компиляторы?Нет. Всё, что ты вставляешь в playground, потенциально видно другим (особенно если генерируешь ссылку для шаринга). Для приватного кода используй локальную машину.
Почему мой код работает локально, но не в playground?Скорее всего, ты используешь внешние зависимости, сетевые вызовы или части стандартной библиотеки, которые недоступны в песочнице. Официальный playground ограничивает взаимодействие с внешним миром — программа может писать только в stdout и stderr. Попробуй запуск программы в локальном окружении.
Почему в playground всегда одно и то же время?В Go Playground время всегда начинается с 2009-11-10 23:00:00 UTC (дата первого коммита в Go). Это делает вывод программ детерминированным, что упрощает кэширование результатов и делает примеры воспроизводимыми. Если твоя программа зависит от реального времени — тестируй локально.
Зачем смотреть на ассемблер, если я пишу на Go?Понимание низкоуровневой реализации помогает писать более эффективный код. Например, можно увидеть, что компилятор не заинлайнил функцию, которая, по твоему мнению, должна была встроиться. Или обнаружить лишние аллокации в горячем пути.

Теги: