Playgrounds
Giới thiệu
Đối với một số mã demo đơn file đơn giản, go cung cấp playground để chạy mã go trực tuyến, không cần cài đặt môi trường go, chỉ cần một trình duyệt là có thể sử dụng.
Địa chỉ mã nguồn mở Playground: go-playground (github.com)
Địa chỉ Playground chính thức: Go Playground - The Go Programming Language

Địa chỉ Playground bên thứ ba: The Go Play Space

Vì đây là một dự án mã nguồn mở, bạn cũng có thể chọn tự搭建 playground cá nhân trên máy chủ của riêng mình, phương pháp cài đặt xem tài liệu chính thức. Máy chủ Playground sẽ lưu trữ các đoạn mã đã tải lên vào Google Cloud Storage, nên không khuyến nghị chia sẻ các mã nhạy cảm. Đối với người dùng trong nước, khuyến nghị sử dụng cái thứ hai vì không cần mạng đặc biệt, nhưng nó vẫn dựa trên máy chủ Playground chính thức, mã cũng sẽ được đồng bộ vào máy chủ của phía chính thức.
Tác giả đã tự làm một đồ chơi goplay, dùng để tương tác với máy chủ playground trong dòng lệnh, cũng có thể dùng như một thư viện client HTTP playground.
HTTP API
Các cách đề cập ở trên đều là tương tác theo cách trình duyệt, nếu muốn tương tác với máy chủ playground từ phía client, ví dụ viết một plugin vuepress go playground. Vì máy chủ playground bản thân là một máy chủ HTTP, chúng ta có thể sử dụng cách HTTP để tương tác với nó. Bản thân官方 không cung cấp tài liệu API, các HTTP API dưới đây là tôi tìm hiểu từ mã nguồn playground,随着 thời gian trôi qua có thể có chút khác biệt, để获取 thông tin chính xác nhất có thể tự đến kho lưu trữ để xem.
Địa chỉ máy chủ playground chính thức: play.golang.org, dưới đây các demo đều lấy máy chủ chính thức làm chuẩn, nếu sử dụng máy chủ bên thứ ba thì thay thế tên miền là được.
share
Chia sẻ đoạn mã lên máy chủ playground, trả về id snippet tương ứng.
POST https://play.golang.org/share| Tên | Vị trí | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|---|
| body | body | string | Không | none |
Ví dụ phản hồi
13AbsRp7_S9compile
Biên dịch và chạy đoạn mã được chỉ định, sau đó trả về kết quả
POST https://play.golang.org/compile| Tên | Vị trí | Kiểu | Mô tả |
|---|---|---|---|
| body | form-data | string | Đoạn mã |
| withVet | form-data | string(true/false) | go vet |
Ví dụ phản hồi
{
"Errors": "",
"Events": [
{
"Message": "Hello, world\n",
"Kind": "stdout",
"Delay": 0
}
],
"Status": 0,
"IsTest": false,
"TestsFailed": 0
}fmt
Trả về đoạn mã sau khi định dạng
POST https://play.golang.org/fmt| Tên | Vị trí | Kiểu | Mô tả |
|---|---|---|---|
| body | form-data | string | Đoạn mã |
| imports | form-data | string(true/false) | fix imports |
Ví dụ phản hồi
{
"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
Kiểm tra sức khỏe máy chủ playground
GET https://play.golang.org/_ah/healthVí dụ phản hồi
okversion
Xem phiên bản go của máy chủ playground
GET https://play.golang.org/versionVí dụ phản hồi
{
"Version": "go1.21.4",
"Release": "go1.21",
"Name": "Go 1.21"
}view
Xem đoạn mã của id snippet được chỉ định
GET https://play.golang.org/p/{id}.goVí dụ phản hồi
// You can edit this code!
// Click here and start typing.
package main
import "fmt"
func main() {
fmt.Println("Hello, world")
}download
Phương thức post mang tham số download form sẽ trả về kết quả dưới dạng attachment
POST https://play.golang.org/p/{id}.go| Tên | Vị trí | Kiểu | Mô tả |
|---|---|---|---|
| download | form-data | string(true/false) | Có tải xuống không |
Ví dụ phản hồi
// You can edit this code!
// Click here and start typing.
package main
import "fmt"
func main() {
fmt.Println("Hello, world")
}TIP
Nếu trong quá trình sử dụng máy chủ chính thức,提示 bạn không thể truy cập hoặc xuất hiện thông tin dưới đây
Viewing and/or sharing code snippets is not available in your country for legal reasons.Đây là vì một số lý do bất khả kháng người dùng khu vực Trung Quốc đại lục không thể truy cập máy chủ, và trong mã nguồn playground cũng có một hàm như vậy
func allowShare(r *http.Request) bool {
if r.Header.Get("X-AppEngine-Country") == "CN" {
return false
}
return true
}Lý do cụ thể xem tại đây Issue #20065 · golang/go (github.com).
