<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(5)
        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 li = document.createElement("li");
                        var a = document.createElement("a");
                        a.setAttribute("href", entries[i].link);
                        var span_title = document.createElement("span"); 
                        span_title.appendChild(document.createTextNode(entries[i].title));
                        span_title.className = "title";
                        a.appendChild(span_title);
                        li.appendChild(a);
                        var span_date = document.createElement("span"); 
                        span_date.appendChild(document.createTextNode(entries[i].publishedDate.substr(0, 11)));
                        span_date.className = "date";
                        a.appendChild(span_date);
                        container.appendChild(li);
                }
        });
}
google.load("feeds", "1");
google.setOnLoadCallback(loadFeed);
</script>

  <link rel="stylesheet" type="text/css" href="/doc/frontpage.css">
  <div id="frontpage">
    <div class="left-column">
      <p style="margin-top: 0;">
        The Go programming language is an open source project to make
        programmers more productive.  Go is expressive, concise, clean,
        and efficient.  Its concurrency mechanisms make it easy to write
        programs that get the most out of multicore and networked machines,
        while its novel type system enables flexible and modular program
        construction.  Go compiles quickly to machine code yet has the
        convenience of garbage collection and the power of run-time reflection.
        It's a fast, statically typed, compiled language that feels like a 
        dynamically typed, interpreted language.
      </p>
      <h2>Check it out!</h2>
      <p>
      <a href="/doc/install.html">Install Go now</a>, or try it right here in your browser: <small>[<a href="/doc/playground.html">How does it work?</a>]</small></p>
      <div id="playground" class="small"></div>
      <script src="/doc/play/playground.js"></script>
    </div>
    <div class="right-column">
      <div id="content-rotating">
      <div id="content-videos">
        <h2>Go Videos <span class="more">| <a href="/doc/docs.html#videos_talks">More...</a></span></h2>
        <a class="video" href="http://www.youtube.com/watch?v=jgVhBThJdXc"><img src="/doc/play_overlay.png" class="thumbnail _001" /> <span class="caption title">&ldquo;Go Programming&rdquo;</span> <span class="caption description">Google I/O Tech Talk</span></a>
      </div>
      <h2>Go Blog <span class="more">| <a href="http://blog.golang.org/">More...</a></span></h2>
      <div id="content-blog">
        <ul id="blogFeed">
        </ul>
      </div>
      </div>
      <h2>Quick Links</h2>
      <div id="resources">
        <div id="resources-users">
          <h3>For newcomers:</h3>
          <ul>
            <li><a href="/doc/install.html">Getting Started</a></li>
            <li><a href="/doc/go_tutorial.html">Tutorial</a></li>
            <li><a href="/doc/effective_go.html">Effective Go</a></li>
            <li><a href="/doc/go_faq.html">Go FAQ</a></li>
            <li><a href="/doc/docs.html">Other Documentation</a></li>
          </ul>
        </div>
        <div id="resources-contributors" class="resources">
          <h3>For developers:</h3>
          <ul>
            <li><a href="http://godashboard.appspot.com/package">Package Dashboard</a></li>
            <li><a href="http://code.google.com/p/go/issues">Issue Tracker</a></li>
            <li><a href="http://godashboard.appspot.com/">Build Status</a></li>
            <li><a href="http://code.google.com/p/go/source/browse/">Go Source</a> [<a href="http://code.google.com/p/go/source/list">changes</a>]</li>
            <li><a href="/pkg/">Package Reference</a></li>
            <li><a href="/doc/go_spec.html">Language Specification</a></li>
          </ul>
        </div>
      </div>  
    </div>
    <div class="end-columns"></div>
  </div>
