| <!doctype html> | |
| <html> | |
| <head> | |
| <title>The {{if .Gotip}}Gotip{{else}}Go{{end}} Playground</title> | |
| <link rel="stylesheet" href="/static/style.css"> | |
| {{if .Analytics}} | |
| <script async src="https://www.googletagmanager.com/gtag/js?id=UA-11222381-7"></script> | |
| <script> | |
| window.dataLayer = window.dataLayer || []; | |
| function gtag(){dataLayer.push(arguments);} | |
| gtag('js', new Date()); | |
| gtag('config', 'UA-11222381-7'); | |
| gtag('config', 'UA-49880327-6'); | |
| </script> | |
| {{end}} | |
| <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> | |
| <script src="/static/jquery-linedtextarea.js"></script> | |
| <script src="/playground.js"></script> | |
| <script src="/static/playground-embed.js"></script> | |
| <script> | |
| $(document).ready(function() { | |
| playground({ | |
| 'codeEl': '#code', | |
| 'outputEl': '#output', | |
| 'runEl': '#run, #embedRun', | |
| 'fmtEl': '#fmt', | |
| 'fmtImportEl': '#imports', | |
| 'shareEl': '#share', | |
| 'shareURLEl': '#shareURL', | |
| 'enableHistory': true, | |
| 'enableShortcuts': true, | |
| 'enableVet': true, | |
| 'toysEl': '.js-playgroundToysEl' | |
| }); | |
| playgroundEmbed({ | |
| 'codeEl': '#code', | |
| 'shareEl': '#share', | |
| 'embedEl': '#embed', | |
| 'embedLabelEl': '#embedLabel', | |
| 'embedHTMLEl': '#shareURL' | |
| }); | |
| $('#code').linedtextarea(); | |
| // Avoid line wrapping. | |
| $('#code').attr('wrap', 'off'); | |
| var about = $('#about'); | |
| about.click(function(e) { | |
| if ($(e.target).is('a')) { | |
| return; | |
| } | |
| about.hide(); | |
| }); | |
| $('#aboutButton').click(function() { | |
| if (about.is(':visible')) { | |
| about.hide(); | |
| return; | |
| } | |
| about.show(); | |
| }) | |
| // Preserve "Imports" checkbox value between sessions. | |
| if (readCookie('playgroundImports') == 'true') { | |
| $('#imports').attr('checked','checked'); | |
| } | |
| $('#imports').change(function() { | |
| createCookie('playgroundImports', $(this).is(':checked') ? 'true' : ''); | |
| }); | |
| {{if .Analytics}} | |
| // Fire Google Analytics events for Run/Share button clicks. | |
| $('#run').click(function() { | |
| gtag('event', 'click', { | |
| event_category: 'playground', | |
| event_label: 'run-button', | |
| }); | |
| }); | |
| $('#share').click(function() { | |
| gtag('event', 'click', { | |
| event_category: 'playground', | |
| event_label: 'share-button', | |
| }); | |
| }); | |
| {{end}} | |
| }); | |
| function createCookie(name, value) { | |
| document.cookie = name+"="+value+"; path=/"; | |
| } | |
| function readCookie(name) { | |
| var nameEQ = name + "="; | |
| var ca = document.cookie.split(';'); | |
| for(var i=0;i < ca.length;i++) { | |
| var c = ca[i]; | |
| while (c.charAt(0)==' ') c = c.substring(1,c.length); | |
| if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); | |
| } | |
| return null; | |
| } | |
| </script> | |
| </head> | |
| <body itemscope itemtype="http://schema.org/CreativeWork"> | |
| <input type="button" value="Run" id="embedRun"> | |
| <div id="banner"> | |
| <div id="head" itemprop="name">The {{if .Gotip}}<a href="https://golang.org/dl/gotip">Gotip</a>{{else}}Go{{end}} Playground</div> | |
| <input type="button" value="Run" id="run"> | |
| <input type="button" value="Format" id="fmt"> | |
| <div id="importsBox"> | |
| <label title="Rewrite imports on Format"> | |
| <input type="checkbox" id="imports"> | |
| Imports | |
| </label> | |
| </div> | |
| <input type="button" value="Share" id="share"> | |
| <input type="text" id="shareURL"> | |
| <label id="embedLabel"> | |
| <input type="checkbox" id="embed"> | |
| embed | |
| </label> | |
| <select class="js-playgroundToysEl"> | |
| {{range .Examples}} | |
| <option value="{{.Path}}">{{.Title}}</option> | |
| {{end}} | |
| </select> | |
| <input type="button" value="About" id="aboutButton"> | |
| </div> | |
| <div id="wrap"> | |
| <textarea itemprop="description" id="code" name="code" autocorrect="off" autocomplete="off" autocapitalize="off" spellcheck="false">{{printf "%s" .Snippet.Body}}</textarea> | |
| </div> | |
| <div id="output"></div> | |
| <img itemprop="image" src="/static/gopher.png" style="display:none"> | |
| <div id="about"> | |
| <p><b>About the Playground</b></p> | |
| <p> | |
| The Go Playground is a web service that runs on | |
| <a href="https://golang.org/">golang.org</a>'s servers. | |
| The service receives a Go program, <a href="https://golang.org/cmd/vet/">vets</a>, compiles, links, and | |
| runs the program inside a sandbox, then returns the output. | |
| </p> | |
| <p> | |
| If the program contains <a href="https://golang.org/pkg/testing">tests or examples</a> | |
| and no main function, the service runs the tests. | |
| Benchmarks will likely not be supported since the program runs in a sandboxed | |
| environment with limited resources. | |
| </p> | |
| <p> | |
| There are limitations to the programs that can be run in the playground: | |
| </p> | |
| <ul> | |
| <li> | |
| The playground can use most of the standard library, with some exceptions. | |
| The only communication a playground program has to the outside world | |
| is by writing to standard output and standard error. | |
| </li> | |
| <li> | |
| In the playground the time begins at 2009-11-10 23:00:00 UTC | |
| (determining the significance of this date is an exercise for the reader). | |
| This makes it easier to cache programs by giving them deterministic output. | |
| </li> | |
| <li> | |
| There are also limits on execution time and on CPU and memory usage. | |
| </li> | |
| </ul> | |
| <p> | |
| The article "<a href="https://blog.golang.org/playground" target="_blank" rel="noopener">Inside | |
| the Go Playground</a>" describes how the playground is implemented. | |
| The source code is available at <a href="https://go.googlesource.com/playground" target="_blank" rel="noopener"> | |
| https://go.googlesource.com/playground</a>. | |
| </p> | |
| <p> | |
| {{if .Gotip}} | |
| This playground uses a development version of Go.<br> | |
| {{else}} | |
| The playground uses the latest stable release of Go.<br> | |
| {{end}} | |
| The current version is <a href="/p/Ztyu2FJaajl">{{.GoVersion}}</a>. | |
| </p> | |
| <p> | |
| The playground service is used by more than just the official Go project | |
| (<a href="https://gobyexample.com/">Go by Example</a> is one other instance) | |
| and we are happy for you to use it on your own site. | |
| All we ask is that you | |
| <a href="mailto:golang-dev@googlegroups.com">contact us first (note this is a public mailing list)</a>, | |
| use a unique user agent in your requests (so we can identify you), | |
| and that your service is of benefit to the Go community. | |
| </p> | |
| <p> | |
| Any requests for content removal should be directed to | |
| <a href="mailto:security@golang.org">security@golang.org</a>. | |
| Please include the URL and the reason for the request. | |
| </p> | |
| </div> | |
| </body> | |
| </html> |