blob: 422d1f46dff854b5e9c456b48f10e25c9f4a75a5 [file] [log] [blame] [edit]
<!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>