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 ดังนั้นไม่แนะนำให้แชร์โค้ดที่เป็นความลับ สำหรับผู้ใช้ในประเทศจีน แนะนำให้ใช้เว็บไซต์ที่สองเพราะไม่ต้องใช้ VPN แต่มันยังคงใช้เซิร์ฟเวอร์ Playground ทางการ โค้ดจะซิงค์ไปยังเซิร์ฟเวอร์ทางการด้วย

ผู้เขียนได้สร้างของเล่น goplay ใช้สำหรับโต้ตอบกับเซิร์ฟเวอร์ playground ในบรรทัดคำสั่ง และสามารถใช้งานเป็นไลบรารีไคลเอนต์ HTTP ของ playground ได้

HTTP API

ที่กล่าวมาข้างต้นล้วนเป็นวิธีการโต้ตอบผ่านเบราว์เซอร์ หากต้องการโต้ตอบกับเซิร์ฟเวอร์ playground จากมุมมองของไคลเอนต์ เช่น การเขียนปลั๊กอิน vuepress go playground เนื่องจากเซิร์ฟเวอร์ playground เองเป็นเซิร์ฟเวอร์ HTTP เราสามารถใช้วิธี HTTP ในการโต้ตอบกับมัน ทางการไม่ได้ให้เอกสาร API โดยตรง HTTP API ด้านล่างนี้ผู้เขียนได้เรียนรู้จากโค้ดของ playground เมื่อเวลาผ่านไปอาจมีความแตกต่างบางประการ หากต้องการข้อมูลที่ถูกต้องที่สุดสามารถตรวจสอบได้ด้วยตนเองใน repository

ที่อยู่เซิร์ฟเวอร์ playground ทางการ: play.golang.org การสาธิตด้านล่างนี้ใช้เซิร์ฟเวอร์ทางการเป็นหลัก หากใช้เซิร์ฟเวอร์ของบุคคลที่สามให้แทนที่โดเมนเนม

share

แชร์โค้ดไปยังเซิร์ฟเวอร์ playground ส่งคืน snippet id ที่สอดคล้อง

http
POST https://play.golang.org/share
ชื่อตำแหน่งประเภทจำเป็นคำอธิบาย
bodybodystringไม่none

ตัวอย่างการตอบกลับ

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

ตรวจสอบเวอร์ชัน 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 จะส่งคืนผลลัพธ์ในรูปแบบ 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