<!--{
	"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="#">Run</a>
<a class="share" href="#">Share</a>
</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">
<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 style="clear: both"></div>

<div class="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 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" 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":        "#learn .code",
		"outputEl":      "#learn .output",
		"runEl":         "#learn .run",
		"shareEl":       "#learn .share",
		"shareRedirect": "http://play.golang.org/p/"
	});
}

google.setOnLoadCallback(init);
</script>
