Skip to content

Playgrounds

소개

간단한 단일 파일 데모 코드의 경우, go 는 go 코드를 온라인으로 실행할 수 있는 playground 를 제공합니다. go 환경을 설치할 필요 없이 브라우저만 있으면 됩니다.

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 서버와 상호작용할 수 있으며, playground HTTP 클라이언트 라이브러리로도 사용할 수 있습니다.

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(true/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(true/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

playground 서버의 go 버전을 확인합니다.

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

download form 파라미터를 포함한 post 메서드는 attachment 방식으로 결과를 반환합니다.

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