| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  | <!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> | 
					
						
							| 
									
										
										
										
											2018-10-07 12:02:07 +02:00
										 |  |  |   <a href="https://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png"></a> | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   <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> |