|
|
<!doctype html>
|
|
|
<html>
|
|
|
<head>
|
|
|
<title>CodeMirror: Go mode</title>
|
|
|
<link rel="stylesheet" href="../../lib/codemirror.css">
|
|
|
<link rel="stylesheet" href="../../theme/elegant.css">
|
|
|
<script src="../../lib/codemirror.js"></script>
|
|
|
<script src="go.js"></script>
|
|
|
<link rel="stylesheet" href="../../doc/docs.css">
|
|
|
<style>.CodeMirror {border:1px solid #999; background:#ffc}</style>
|
|
|
</head>
|
|
|
<body>
|
|
|
<h1>CodeMirror: Go mode</h1>
|
|
|
|
|
|
<form><textarea id="code" name="code">
|
|
|
// Prime Sieve in Go.
|
|
|
// Taken from the Go specification.
|
|
|
// Copyright © The Go Authors.
|
|
|
|
|
|
package main
|
|
|
|
|
|
import "fmt"
|
|
|
|
|
|
// Send the sequence 2, 3, 4, ... to channel 'ch'.
|
|
|
func generate(ch chan<- int) {
|
|
|
for i := 2; ; i++ {
|
|
|
ch <- i // Send 'i' to channel 'ch'
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// Copy the values from channel 'src' to channel 'dst',
|
|
|
// removing those divisible by 'prime'.
|
|
|
func filter(src <-chan int, dst chan<- int, prime int) {
|
|
|
for i := range src { // Loop over values received from 'src'.
|
|
|
if i%prime != 0 {
|
|
|
dst <- i // Send 'i' to channel 'dst'.
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// The prime sieve: Daisy-chain filter processes together.
|
|
|
func sieve() {
|
|
|
ch := make(chan int) // Create a new channel.
|
|
|
go generate(ch) // Start generate() as a subprocess.
|
|
|
for {
|
|
|
prime := <-ch
|
|
|
fmt.Print(prime, "\n")
|
|
|
ch1 := make(chan int)
|
|
|
go filter(ch, ch1, prime)
|
|
|
ch = ch1
|
|
|
}
|
|
|
}
|
|
|
|
|
|
func main() {
|
|
|
sieve()
|
|
|
}
|
|
|
</textarea></form>
|
|
|
|
|
|
<script>
|
|
|
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
|
|
|
theme: "elegant",
|
|
|
matchBrackets: true,
|
|
|
indentUnit: 8,
|
|
|
tabSize: 8,
|
|
|
indentWithTabs: true,
|
|
|
mode: "text/x-go"
|
|
|
});
|
|
|
</script>
|
|
|
|
|
|
<p><strong>MIME type:</strong> <code>text/x-go</code></p>
|
|
|
</body>
|
|
|
</html>
|
|
|
|