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

<div class="left">

<div id="learn">
{{if not $.GoogleCN}}
<a class="popout share">Pop-out</a>
{{end}}
<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 not $.GoogleCN}}
<a class="share" href="#" title="Share this code">Share</a>
<a class="tour" href="//tour.golang.org/" title="Learn Go from your browser">Tour</a>
{{end}}
</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="/dl/" id="start">
<span class="big">Download Go</span>
<span class="desc">
Binary distributions available for<br>
Linux, macOS, Windows, and more.
</span>
</a>

</div>

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

{{if not $.GoogleCN}}
<div class="left">
  <div id="video">
    <div class="rootHeading">Featured video</div>
	<div class="js-frontpage-video" style="--aspect-ratio-padding: 58.07%;"><iframe width="415" height="241" src="//www.youtube.com/embed/ytEkHepK08c" frameborder="0" allowfullscreen></iframe></div>
  </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>
{{end}}

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

<script>
(function() {
	'use strict';

	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()
		}
	});

	{{if not $.GoogleCN}}

	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();
	}

	window.feedLoaded = function(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() {
		// 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);
		// Compute the aspect ratio (as a percentage) of the video
		// using the fixed width 415 and the height of the current video, v.h.
		var ar = 100*v.h/415;
		$('.js-frontpage-video').attr('style', '--aspect-ratio-padding: ' + ar + '%;');
	});

	{{end}}
})();
</script>
