Playgrounds
Введение
Для простых демонстрационных примеров в одном файле Go предоставляет playground для онлайн-запуска кода Go без необходимости установки среды Go — достаточно только браузера.
Open source репозиторий Playground: go-playground (github.com)
Официальный адрес Playground: Go Playground - The Go Programming Language

Адрес стороннего Playground: The Go Play Space

Поскольку это проект с открытым исходным кодом, вы также можете развернуть личный playground на своём сервере — инструкция по установке находится в официальной документации. Сервер Playground сохраняет загруженные фрагменты кода в Google Cloud Storage, поэтому не рекомендуется делиться конфиденциальным кодом. Для пользователей из Китая рекомендуется использовать второй вариант, так как он не требует обхода блокировок, но он всё равно основан на официальных серверах Playground, и код также синхронизируется с официальными серверами.
Автор создал игрушечный проект goplay для взаимодействия с сервером playground из командной строки, который также можно использовать как HTTP-клиентскую библиотеку для playground.
HTTP API
Всё вышеперечисленное — способы взаимодействия через браузер. Если вы хотите взаимодействовать с сервером playground с клиентской стороны, например, написать плагин vuepress go playground. Поскольку сервер playground сам по себе является HTTP-сервером, мы можем взаимодействовать с ним через HTTP. Официальная документация API не предоставляется, приведённые ниже HTTP API были изучены из кода playground и со временем могут отличаться. Для получения самой точной информации вы можете самостоятельно изучить репозиторий.
Адрес официального сервера playground: play.golang.org. В примерах ниже используется официальный сервер. Если вы используете сторонний сервер, просто замените домен.
share
Поделиться фрагментом кода на сервере playground, возвращает соответствующий snippet id.
POST https://play.golang.org/share| Название | Расположение | Тип | Обязательно | Описание |
|---|---|---|---|---|
| body | body | string | нет | нет |
Пример ответа
13AbsRp7_S9compile
Скомпилировать и выполнить указанный фрагмент кода, затем вернуть результат.
POST https://play.golang.org/compile| Название | Расположение | Тип | Описание |
|---|---|---|---|
| body | form-data | string | Фрагмент кода |
| withVet | form-data | string(ture/false) | go vet |
Пример ответа
{
"Errors": "",
"Events": [
{
"Message": "Hello, world\n",
"Kind": "stdout",
"Delay": 0
}
],
"Status": 0,
"IsTest": false,
"TestsFailed": 0
}fmt
Возвращает отформатированный фрагмент кода.
POST https://play.golang.org/fmt| Название | Расположение | Тип | Описание |
|---|---|---|---|
| body | form-data | string | Фрагмент кода |
| imports | form-data | string(ture/false) | fix imports |
Пример ответа
{
"Body": "// You can edit this code!\n// Click here and start typing.\npackage main\n\nimport \"fmt\"\n\nfunc main() {\n\tfmt.Println(\"Hello, world\")\n}\n",
"Error": ""
}health
Проверка работоспособности сервера playground.
GET https://play.golang.org/_ah/healthПример ответа
okversion
Просмотр версии Go на сервере playground.
GET https://play.golang.org/versionПример ответа
{
"Version": "go1.21.4",
"Release": "go1.21",
"Name": "Go 1.21"
}view
Просмотр фрагмента кода по указанному snippet id.
GET https://play.golang.org/p/{id}.goПример ответа
// You can edit this code!
// Click here and start typing.
package main
import "fmt"
func main() {
fmt.Println("Hello, world")
}download
Метод POST с параметром download form возвращает результат как вложение.
POST https://play.golang.org/p/{id}.go| Название | Расположение | Тип | Описание |
|---|---|---|---|
| download | form-data | string(true/false) | Скачать ли |
Пример ответа
// You can edit this code!
// Click here and start typing.
package main
import "fmt"
func main() {
fmt.Println("Hello, world")
}TIP
Если при использовании официального сервера вы получаете сообщение о невозможности доступа или видите следующую информацию:
Viewing and/or sharing code snippets is not available in your country for legal reasons.Это связано с тем, что пользователи из материкового Китая не могут получить доступ к серверу по не зависящим от них причинам. В исходном коде playground также есть такая функция:
func allowShare(r *http.Request) bool {
if r.Header.Get("X-AppEngine-Country") == "CN" {
return false
}
return true
}Подробнее об этом можно прочитать здесь: Issue #20065 · golang/go (github.com).
