<!--{
	"Path": "/"
}-->

<div class="left">

<div id="learn">
<img class="icon share" src="/doc/share.png" alt="View full screen" title="View full screen">
<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>
<a class="share" href="#" title="Share this code">Share</a>
<a class="tour" href="http://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="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 environment that makes it easy to build
simple, reliable, and efficient software.
</div>

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

<a href="/doc/install" 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="http://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="http://blog.golang.org/">Read more</a></div>
</div>

</div>

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

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("feeds", "1");

function feedLoaded(result) {
	if (result.error) {
		console.log(result.error);
		return;
	}
	var blog = document.getElementById("blog");
	var read = blog.getElementsByClassName("read")[0];
	for (var i = 0; i < result.feed.entries.length && i < 2; i++) {
		var entry = result.feed.entries[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.contentSnippet;
		blog.insertBefore(extract, read);
		var when = document.createElement("div");
		when.className = "when";
		var pub = entry.publishedDate.split(" ").slice(1,3).join(" ");
		when.innerHTML = "Published " + pub
		blog.insertBefore(when, read);
	}
}

function init() {
	// Load blog feed.
	var feed = new google.feeds.Feed("http://blog.golang.org/feeds/posts/default");
	feed.load(feedLoaded);

	// Set up playground.
	playground({
		"codeEl":        "#learn .code",
		"outputEl":      "#learn .output",
		"runEl":         "#learn .run",
		"shareEl":       "#learn .share",
		"shareRedirect": "http://play.golang.org/p/",
		"toysEl":        "#learn .toys select"
	});
}

google.setOnLoadCallback(init);
</script>
