266 lines
3.4 KiB
Markdown
266 lines
3.4 KiB
Markdown
---
|
|
title: Golang
|
|
icon: devicon-plain:go
|
|
createTime: 2025/10/08 09:44:30
|
|
permalink: /en/guide/repl/golang/
|
|
---
|
|
|
|
## Overview
|
|
|
|
The theme provides Golang code demonstration functionality, supporting online execution of Go code.
|
|
|
|
::: important
|
|
This functionality works by submitting code to a server for compilation and execution.
|
|
|
|
Therefore, please do not use this feature to execute overly complex code, and avoid making execution requests too frequently.
|
|
:::
|
|
|
|
## Configuration
|
|
|
|
This feature is disabled by default. You can enable it through configuration.
|
|
|
|
```ts title=".vuepress/config.ts"
|
|
export default defineUserConfig({
|
|
theme: plumeTheme({
|
|
markdown: {
|
|
repl: {
|
|
go: true,
|
|
},
|
|
},
|
|
})
|
|
})
|
|
```
|
|
|
|
## Usage
|
|
|
|
Use the `::: go-repl` container syntax to wrap Go code blocks. The theme will detect the code blocks and add execution buttons.
|
|
|
|
### Read-only Code Demo
|
|
|
|
Golang code demos are read-only by default and cannot be edited.
|
|
|
|
````md
|
|
::: go-repl title="Custom Title"
|
|
```go
|
|
// your go code
|
|
```
|
|
:::
|
|
````
|
|
|
|
### Editable Code Demo
|
|
|
|
For online editing and execution, wrap the code block in the `::: go-repl editable` container syntax.
|
|
|
|
````md
|
|
::: go-repl editable title="Custom Title"
|
|
```go
|
|
// your go code
|
|
```
|
|
:::
|
|
````
|
|
|
|
## Examples
|
|
|
|
### Print Content
|
|
|
|
**Input:**
|
|
|
|
````md
|
|
:::go-repl
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
func main() {
|
|
fmt.Println("Hello World")
|
|
}
|
|
```
|
|
:::
|
|
````
|
|
|
|
**Output:**
|
|
:::go-repl
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
func main() {
|
|
fmt.Println("Hello World")
|
|
}
|
|
```
|
|
|
|
:::
|
|
|
|
### Editable Code Demo
|
|
|
|
**Input:**
|
|
|
|
````md
|
|
:::go-repl editable
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
func main() {
|
|
fmt.Println("Hello World")
|
|
}
|
|
```
|
|
:::
|
|
````
|
|
|
|
**Output:**
|
|
|
|
:::go-repl editable
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
func main() {
|
|
fmt.Println("Hello World")
|
|
}
|
|
```
|
|
|
|
:::
|
|
|
|
### Loop with Random Delay Printing
|
|
|
|
**Input:**
|
|
|
|
````md
|
|
:::go-repl
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
for i := 0; i < 10; i++ {
|
|
dur := time.Duration(rand.Intn(1000)) * time.Millisecond
|
|
fmt.Printf("Sleeping for %v\n", dur)
|
|
// Sleep for a random duration between 0-1000ms
|
|
time.Sleep(dur)
|
|
}
|
|
fmt.Println("Done!")
|
|
}
|
|
```
|
|
:::
|
|
````
|
|
|
|
**Output:**
|
|
|
|
:::go-repl
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
for i := 0; i < 10; i++ {
|
|
dur := time.Duration(rand.Intn(1000)) * time.Millisecond
|
|
fmt.Printf("Sleeping for %v\n", dur)
|
|
// Sleep for a random duration between 0-1000ms
|
|
time.Sleep(dur)
|
|
}
|
|
fmt.Println("Done!")
|
|
}
|
|
```
|
|
|
|
:::
|
|
|
|
### Network Request
|
|
|
|
::: go-repl
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"net"
|
|
"net/http"
|
|
"os"
|
|
)
|
|
|
|
func main() {
|
|
http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
|
|
fmt.Fprint(w, "Hello, playground")
|
|
})
|
|
|
|
log.Println("Starting server...")
|
|
l, err := net.Listen("tcp", "localhost:8080")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
go func() {
|
|
log.Fatal(http.Serve(l, nil))
|
|
}()
|
|
|
|
log.Println("Sending request...")
|
|
res, err := http.Get("http://localhost:8080/hello")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
log.Println("Reading response...")
|
|
if _, err := io.Copy(os.Stdout, res.Body); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
```
|
|
|
|
:::
|
|
|
|
### Multiple Files
|
|
|
|
::: go-repl
|
|
|
|
```go{10-12}
|
|
package main
|
|
|
|
import (
|
|
"play.ground/foo"
|
|
)
|
|
|
|
func main() {
|
|
foo.Bar()
|
|
}
|
|
-- go.mod --
|
|
module play.ground
|
|
-- foo/foo.go --
|
|
package foo
|
|
|
|
import "fmt"
|
|
|
|
func Bar() {
|
|
fmt.Println("This function lives in an another file!")
|
|
}
|
|
|
|
```
|
|
|
|
:::
|