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 를 반환합니다.
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(true/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(true/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
playground 서버의 go 버전을 확인합니다.
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
download form 파라미터를 포함한 post 메서드는 attachment 방식으로 결과를 반환합니다.
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) 를 참조하세요.
