<!-- The Go Programming Language -->

<script>
  // On the frontpage we hide the header and navigation elements that other
  // pages have.
  document.getElementById('generatedHeader').style.display = 'none';
  document.getElementById('nav').style.display = 'none';
</script>

<!-- begin blog post widget JS/styles -->
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
function loadFeed() {
	var url = "http://blog.golang.org/feeds/posts/default";
	var divId = "blogFeed";
	var feed = new google.feeds.Feed(url);
	feed.setNumEntries(8)
	feed.load(function (result) {
		var container = document.getElementById(divId)
		if (result.error) {
			container.innerHTML = "Error loading feed.";
			return;
		}
		container.innerHTML = "";
		var entries = result.feed.entries;
		console.log(entries);
		for (var i=0; i<entries.length; i++) {
			var a = document.createElement("a");
			a.setAttribute("href", entries[i].link);
			a.appendChild(document.createTextNode(entries[i].title));
			container.appendChild(a);
		}
	});
}
google.load("feeds", "1");
google.setOnLoadCallback(loadFeed);
</script>
<!-- end blog post widget JS/styles -->

<table style="padding-top: 1em; padding-bottom: 2em;">
  <tr>
    <td>
      <img style="padding-right: 1em;" src="/doc/go-logo-black.png">
    </td>
    <td>
      <div><span style="font-size: 2em; font-weight: bold;">a systems programming language</span><br><span style="font-size: 1.5em;">expressive, concurrent, garbage-collected</span></div>
    </td>
  </tr>
</table>

<div id="fp-videos">
  <h1>Go videos</h1>
  <div class="video">
    <a href="http://www.youtube.com/watch?v=jgVhBThJdXc"><img src="/doc/video-snap-io.jpg"></a>
    <div class="title">"Go Programming"</div>
    <div class="subtitle">Google I/O Tech Talk</div>
  </div>
  <div class="video">
    <a href="http://www.youtube.com/watch?v=wwoWei-GAPo"><img src="/doc/video-snap-fastcompiles.jpg"></a>
    <div class="title">"Fast Compiles"</div>
    <div class="subtitle">Go Promotional Video</div>
  </div>
  <div class="video">
    <a href="http://www.youtube.com/gocoding"><img src="/doc/video-snap-gocoding.jpg"></a>
    <div class="title">Go Youtube Channel</div>
    <div class="subtitle">Screencasts and more</div>
  </div>
  <a class="more" href="/doc/go_learning.html#videos_talks">More videos and talks.</a>
</div>

<div id="frontpage">

<div id="blog">
  <h1>From the <a href="http://blog.golang.org">Go Blog</a>:</h1>
  <div id="blogFeed">Loading...</div>
</div>

<p style="font-size: 1.5em; font-weight: bold;">Go is &hellip;</p>

<h3>&hellip; simple</h3>
<pre class="code">
package main

import "fmt"

func main() {
  fmt.Printf("Hello, 世界\n")
}</pre>

<p>Go has a small, simple feature set, making it easy to learn.</p>

<h3>&hellip; fast</h3>

<p>
Go compilers produce fast code fast. Typical builds take a fraction of a second yet the resulting programs run nearly as quickly as comparable C or C++ code.
</p>

<h3>&hellip; concurrent</h3>

<p>
Go promotes writing systems and servers as sets of lightweight communicating
processes, called goroutines, with strong support from the language.  Run
thousands of goroutines if you want&mdash;and say good-bye to stack overflows.
</p>

<h3>&hellip; safe</h3>

<p>Go is type safe and memory safe. Go has pointers but no pointer arithmetic.
For random access, use slices, which know their limits.</p>

<h3>&hellip; fun</h3>

<p>
Go has fast builds, clean syntax, garbage collection,
methods for any type, and run-time reflection.
It feels like a dynamic language but has the speed and safety of a static language.
It's a joy to use.
</p>

<h3>&hellip; open source</h3>

<p>
<a href="/doc/install.html">Go for it</a>.
</p>

</div>
