Skip to content

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.

http
POST https://play.golang.org/share
НазваниеРасположениеТипОбязательноОписание
bodybodystringнетнет

Пример ответа

13AbsRp7_S9

compile

Скомпилировать и выполнить указанный фрагмент кода, затем вернуть результат.

http
POST https://play.golang.org/compile
НазваниеРасположениеТипОписание
bodyform-datastringФрагмент кода
withVetform-datastring(ture/false)go vet

Пример ответа

json
{
  "Errors": "",
  "Events": [
    {
      "Message": "Hello, world\n",
      "Kind": "stdout",
      "Delay": 0
    }
  ],
  "Status": 0,
  "IsTest": false,
  "TestsFailed": 0
}

fmt

Возвращает отформатированный фрагмент кода.

http
POST https://play.golang.org/fmt
НазваниеРасположениеТипОписание
bodyform-datastringФрагмент кода
importsform-datastring(ture/false)fix imports

Пример ответа

json
{
  "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.

http
GET https://play.golang.org/_ah/health

Пример ответа

ok

version

Просмотр версии Go на сервере playground.

http
GET https://play.golang.org/version

Пример ответа

json
{
  "Version": "go1.21.4",
  "Release": "go1.21",
  "Name": "Go 1.21"
}

view

Просмотр фрагмента кода по указанному snippet id.

http
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 возвращает результат как вложение.

http
POST https://play.golang.org/p/{id}.go
НазваниеРасположениеТипОписание
downloadform-datastring(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 также есть такая функция:

go
func allowShare(r *http.Request) bool {
  if r.Header.Get("X-AppEngine-Country") == "CN" {
    return false
  }
  return true
}

Подробнее об этом можно прочитать здесь: Issue #20065 · golang/go (github.com).

Golang by www.golangdev.cn edit