You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.1 KiB
86 lines
2.1 KiB
3 years ago
|
<!doctype html>
|
||
|
|
||
|
<title>CodeMirror: Go mode</title>
|
||
|
<meta charset="utf-8"/>
|
||
|
<link rel=stylesheet href="../../doc/docs.css">
|
||
|
|
||
|
<link rel="stylesheet" href="../../lib/codemirror.css">
|
||
|
<link rel="stylesheet" href="../../theme/elegant.css">
|
||
|
<script src="../../lib/codemirror.js"></script>
|
||
|
<script src="../../addon/edit/matchbrackets.js"></script>
|
||
|
<script src="go.js"></script>
|
||
|
<style>.CodeMirror {border:1px solid #999; background:#ffc}</style>
|
||
|
<div id=nav>
|
||
|
<a href="http://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png"></a>
|
||
|
|
||
|
<ul>
|
||
|
<li><a href="../../index.html">Home</a>
|
||
|
<li><a href="../../doc/manual.html">Manual</a>
|
||
|
<li><a href="https://github.com/codemirror/codemirror">Code</a>
|
||
|
</ul>
|
||
|
<ul>
|
||
|
<li><a href="../index.html">Language modes</a>
|
||
|
<li><a class=active href="#">Go</a>
|
||
|
</ul>
|
||
|
</div>
|
||
|
|
||
|
<article>
|
||
|
<h2>Go mode</h2>
|
||
|
<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>
|
||
|
</article>
|