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

<div id="left" class="aboutcol">

<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="/install/" id="start">
<div class="big">Download Go</div>
<div class="desc">
Binary distributions available for<br>
Linux, Mac OS X, Windows, and more.
</div>
</a>

</div>

<div id="right" class="learncol">

<div id="learn">
<div class="rootHeading">Try Go</div>
<div class="input">
<textarea spellcheck="false" id="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" id="output">
<pre>
Hello, 世界
</pre>
</div>
<div class="buttons">
<a id="run" href="#">Run</a>
<a id="share" href="#">Share</a>
</div>
</div>

</div>

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

<div id="left">

<div id="video">
<div class="rootHeading">Featured video</div>
<a class="title" href="http://www.youtube.com/watch?v=Mo1YKpIF1PQ">Building integrated apps on Google's cloud platform with Go</a>
<iframe width="415" height="241" src="http://www.youtube.com/embed/Mo1YKpIF1PQ" frameborder="0" allowfullscreen></iframe>
</div>

</div>

<div id="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>

<div id="plusoneRoot"><g:plusone annotation="none"></g:plusone></div>

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="/doc/play/playground.js"></script>
<script type="text/javascript">
google.load("feeds", "1");
google.load("jquery", "1.7.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({
		"simple":        true,
		"codeEl":        "#code",
		"outputEl":      "#output",
		"runEl":         "#run",
		"shareEl":       "#share",
		"shareRedirect": "http://play.golang.org/p/"
	});
}

google.setOnLoadCallback(init);
</script>
