<!-- The Go Programming Language -->

<script type="text/javascript">
  // 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;
		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; margin-top: 0;">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>
