## Learning Go

If you're new to Go, we recommend you work through the tutorial. The language specification has all the details should you want to explore.

Once you've learned a little about the language, Effective Go will help you learn the style and idioms of programming in Go.

### A Tour of Go

An interactive introduction to Go in three sections. The first section covers basic syntax and data structures; the second discusses methods and interfaces; and the third introduces Go's concurrency primitives. Each section concludes with a few exercises so you can practice what you've learned. You can take the tour online or install it locally.

### A Tutorial for the Go Programming Language

The first tutorial. An introductory text that touches upon several core concepts: syntax, types, allocation, constants, I/O, sorting, printing, goroutines, and channels.

### Course Notes

Slides from a 3-day course about the Go programming language. A more thorough introduction than the tutorial.

- Day 1: Basics [270KB PDF]
- Day 2: Types, Methods, Interfaces [270KB PDF]
- Day 3: Concurrency and Communication [180KB PDF]

### Effective Go

A document that gives tips for writing clear, idiomatic Go code. A must read for any new Go programmer. It augments the tutorial and the language specification, both of which should be read first.

### Frequently Asked Questions (FAQ)

Answers to common questions about Go.

### How to write Go code

How to write a new package and how to test code.

### Codelab: Writing Web Applications

This codelab takes the reader through the creation of a simple wiki web application. It touches on structs, methods, file I/O, http, regular expressions, and closures.

### Codewalks

Guided tours of Go programs.

- First-Class Functions in Go
- Generating arbitrary text: a Markov chain algorithm
- Share Memory by Communicating

### Go for C++ Programmers

An introduction to Go for C++ programmers.

## Go Articles

Notable articles from the Go Blog.

### Language

- JSON-RPC: a tale of interfaces
- Go's Declaration Syntax
- Defer, Panic, and Recover
- Go Concurrency Patterns: Timing out, moving on
- Go Slices: usage and internals
- A GIF decoder: an exercise in Go interfaces
- Error Handling and Go

### Packages

- JSON and Go - using the json package.
- Gobs of data - the design and use of the gob package.
- The Laws of Reflection - the fundamentals of the reflect package.
- The Go image package - the fundamentals of the image package.
- The Go image/draw package - the fundamentals of the image/draw package.

### Tools

- C? Go? Cgo! - linking against C code with cgo.
- Godoc: documenting Go code - writing good documentation for godoc.
- Profiling Go Programs

## Non-English Documentation

### Belarusian — Беларуская

- faq-be - Frequently Asked Questions.

### Chinese — 中文

- golang-china - a broad range of Go documentation.
- Effective Go and Tutorial

### Czech — Čeština

- Pravidla reflexe - a translation of The Laws of Reflection.

### French — Français

- golang-france - Go documentation.

### German — Deutsch

- Eine Anleitung zum Programmieren in Go - the Go Tutorial.
- Wirkungsvoll Go programmieren - Effective Go.
- Wie man Go-Kode schreibt - How to Write Go Code.

### Japanese — 日本語

- A Tour of Go
- golang.jp - Go documentation and news.

### Korean — 한국어

- A Tour of Go
- golang-korea - Go documentation and news.

## References

Keep these under your pillow.

### Package Documentation

The built-in documentation for the Go standard library.

### Command Documentation

The built-in documentation for the Go tools.

### Language Specification

The official Go Language specification.

### Release History

A summary of the changes between Go releases.

### The Go Memory Model

A document that specifies the conditions under which reads of a variable in one goroutine can be guaranteed to observe values produced by writes to the same variable in a different goroutine.

### Debugging Go Code with GDB

Using GDB to debug Go programs.

## Videos and Talks

### Writing Web Apps in Go

A talk by Rob Pike and Andrew Gerrand presented at Google I/O 2011. It walks through the construction and deployment of a simple web application and unveils the Go runtime for App Engine. See the presentation slides.

### Real World Go

A talk by Andrew Gerrand presented at Google I/O Bootcamp 2011. It gives a broad overview of Go's type system and concurrency model and provides four examples of Go programs that solve real problems. See the presentation slides.

### Go Programming

A presentation delivered by Rob Pike and Russ Cox at Google I/O 2010. It illustrates how programming in Go differs from other languages through a set of examples demonstrating features particular to Go. These include concurrency, embedded types, methods on any type, and program construction using interfaces.

### Practical Go Programming

This talk presents the development of a complete web application in Go. It looks at design, storage, concurrency, and scaling issues in detail, using the simple example of an URL shortening service. See the presentation slides.

### The Go Tech Talk

An hour-long talk delivered by Rob Pike at Google in October 2009. The language's first public introduction. (See the slides in PDF format.) The language has changed since it was made, but it's still a good introduction.

### gocoding YouTube Channel

A YouTube channel that includes screencasts and other Go-related videos:

- Screencast: Writing Go Packages - writing, building, and distributing Go packages.
- Screencast: Testing Go Packages - writing unit tests and benchmarking Go packages.

### The Expressiveness Of Go

A discussion of the qualities that make Go an expressive and comprehensible language. The talk was presented by Rob Pike at JAOO 2010. The recording of the event was lost due to a hardware error.

### Another Go at Language Design

A tour, with some background, of the major features of Go, intended for an audience new to the language. The talk was presented at OSCON 2010. See the presentation slides.

This talk was also delivered at Sydney University in September 2010. A video of the lecture is available here.

### Go Emerging Languages Conference Talk

Rob Pike's Emerging Languages Conference presentation delivered in July 2010. See the presentation slides. Abstract:

Go’s approach to concurrency differs from that of many languages, even those (such as Erlang) that make concurrency central, yet it has deep roots. The path from Hoare’s 1978 paper to Go provides insight into how and why Go works as it does.

### The Go frontend for GCC

A description of the Go language frontend for gcc. Ian Lance Taylor's paper delivered at the GCC Summit 2010.

### The Go Promo Video

A short promotional video featuring Russ Cox demonstrating Go's fast compiler.