<!--{
	"Path": "/",
	"Template": true
}-->

<div class="left">

<div id="learn">
<a class="popout share">Pop-out</a>
<div class="rootHeading">Try Go</div>
<div class="input">
<textarea spellcheck="false" class="code">// You can edit this code!
// Click here and start typing.
package main

import "fmt"

func main() {
	fmt.Println("Hello, 世界")
}</textarea>
</div>
<div class="output">
<pre>
Hello, 世界
</pre>
</div>
<div class="buttons">
<a class="run" href="#" title="Run this code [shift-enter]">Run</a>
{{if $.Share}}
<a class="share" href="#" title="Share this code">Share</a>
{{end}}
<a class="tour" href="//tour.golang.org/" title="Learn Go from your browser">Tour</a>
</div>
<div class="toys">
<select>
	<option value="hello.go">Hello, World!</option>
	<option value="life.go">Conway's Game of Life</option>
	<option value="fib.go">Fibonacci Closure</option>
	<option value="peano.go">Peano Integers</option>
	<option value="pi.go">Concurrent pi</option>
	<option value="sieve.go">Concurrent Prime Sieve</option>
	<option value="solitaire.go">Peg Solitaire Solver</option>
	<option value="tree.go">Tree Comparison</option>
</select>
</div>
</div>

</div>

<div class="right">

<div id="about">
Go is an open source programming language that makes it easy to build
simple, reliable, and efficient software.
</div>

<div id="gopher"></div>

<a href="https://golang.org/dl/" id="start">
<span class="big">Download Go</span>
<span class="desc">
Binary distributions available for<br>
Linux, Mac OS X, Windows, and more.
</span>
</a>

</div>

<div style="clear: both"></div>

<div class="left">

<div id="video">
<div class="rootHeading">Featured video</div>
<iframe width="415" height="241" src="//www.youtube.com/embed/ytEkHepK08c" frameborder="0" allowfullscreen></iframe>
</div>

</div>

<div class="right">

<div id="blog">
<div class="rootHeading">Featured articles</div>
<div class="read"><a href="//blog.golang.org/">Read more</a></div>
</div>

</div>

<div style="clear: both;"></div>

<script type="text/javascript">

function readableTime(t) {
	var m = ["January", "February", "March", "April", "May", "June", "July",
		"August", "September", "October", "November", "December"];
	var p = t.substring(0, t.indexOf("T")).split("-");
	var d = new Date(p[0], p[1]-1, p[2]);
	return d.getDate() + " " + m[d.getMonth()] + " " + d.getFullYear();
}

function feedLoaded(result) {
	var blog = document.getElementById("blog");
	var read = blog.getElementsByClassName("read")[0];
	for (var i = 0; i < result.length && i < 2; i++) {
		var entry = result[i];
		var title = document.createElement("a");
		title.className = "title";
		title.href = entry.Link;
		title.innerHTML = entry.Title;
		blog.insertBefore(title, read);
		var extract = document.createElement("div");
		extract.className = "extract";
		extract.innerHTML = entry.Summary;
		blog.insertBefore(extract, read);
		var when = document.createElement("div");
		when.className = "when";
		when.innerHTML = "Published " + readableTime(entry.Time);
		blog.insertBefore(when, read);
	}
}

window.initFuncs.push(function() {
	// Set up playground if enabled.
	if (window.playground) {
		window.playground({
			"codeEl":        "#learn .code",
			"outputEl":      "#learn .output",
			"runEl":         "#learn .run",
			"shareEl":       "#learn .share",
			"shareRedirect": "//play.golang.org/p/",
			"toysEl":        "#learn .toys select"
		});
	} else {
		$('#learn').hide()
	}

	// Load blog feed.
	$('<script/>').attr('text', 'text/javascript')
		.attr('src', '//blog.golang.org/.json?jsonp=feedLoaded')
		.appendTo('body');

	// Set the video at random.
	var videos = [
		{h: 241, s: "//www.youtube.com/embed/ytEkHepK08c"}, // Tour of Go
		{h: 241, s: "//www.youtube.com/embed/f6kdp27TYZs"}, // Concurrency Patterns
		{h: 233, s: "//player.vimeo.com/video/69237265"}    // Simple environment
	];
	var v = videos[Math.floor(Math.random()*videos.length)];
	$('#video iframe').attr('height', v.h).attr('src', v.s);
});

</script>
