Skip to content

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.

http
POST https://play.golang.org/share
TênVị tríKiểuBắt buộcMô tả
bodybodystringKhôngnone

Ví dụ phản hồi

13AbsRp7_S9

compile

Biên dịch và chạy đoạn mã được chỉ định, sau đó trả về kết quả

http
POST https://play.golang.org/compile
TênVị tríKiểuMô tả
bodyform-datastringĐoạn mã
withVetform-datastring(true/false)go vet

Ví dụ phản hồi

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

http
POST https://play.golang.org/fmt
TênVị tríKiểuMô tả
bodyform-datastringĐoạn mã
importsform-datastring(true/false)fix imports

Ví dụ phản hồi

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

Kiểm tra sức khỏe máy chủ playground

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

Ví dụ phản hồi

ok

version

Xem phiên bản go của máy chủ playground

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

Ví dụ phản hồi

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

view

Xem đoạn mã của id snippet được chỉ định

http
GET https://play.golang.org/p/{id}.go

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")
}

download

Phương thức post mang tham số download form sẽ trả về kết quả dưới dạng attachment

http
POST https://play.golang.org/p/{id}.go
TênVị tríKiểuMô tả
downloadform-datastring(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

go
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).

Golang by www.golangdev.cn edit