blob: 7eb3a3ad263a76c0da3fb1e0b1154f6290c43d14 [file] [log] [blame]
Andrew Gerrand7cb21a72012-01-19 11:24:54 +11001<!--{
Andrew Gerrand8bbe5cc2012-01-20 07:37:36 +11002 "Title": "Documentation",
3 "Path": "/doc/"
Andrew Gerrand7cb21a72012-01-19 11:24:54 +11004}-->
Andrew Gerrand1ca99c82010-05-27 16:47:42 -07005
Andrew Gerrandd84de092012-02-13 21:22:36 +11006<p>
7The Go programming language is an open source project to make programmers more
8productive.
9</p>
10
11<p>
12Go is expressive, concise, clean, and efficient. Its concurrency
13mechanisms make it easy to write programs that get the most out of multicore
14and networked machines, while its novel type system enables flexible and
15modular program construction. Go compiles quickly to machine code yet has the
16convenience of garbage collection and the power of run-time reflection. It's a
17fast, statically typed, compiled language that feels like a dynamically typed,
18interpreted language.
19</p>
20
21<div id="manual-nav"></div>
Andrew Gerrand6ab8d242010-09-16 14:01:02 +100022
Andrew Gerrandf78d50c2012-03-05 14:31:27 +110023<h2>Installing Go</h2>
24
25<h3><a href="/doc/install">Getting Started</a></h3>
26<p>
27Instructions for downloading and installing the Go compilers, tools, and
28libraries.
29</p>
30
31
Andrew Gerrand6ab8d242010-09-16 14:01:02 +100032<h2 id="learning">Learning Go</h2>
33
Andrew Gerrandf200b722012-03-06 12:50:52 +110034<img class="gopher" src="/doc/gopher/doc.png"/>
35
Andrew Gerrand43ad89d2014-07-25 10:28:39 +100036<h3 id="go_tour"><a href="//tour.golang.org/">A Tour of Go</a></h3>
Andrew Gerrandf03b37b2011-10-05 11:12:07 -070037<p>
38An interactive introduction to Go in three sections.
39The first section covers basic syntax and data structures; the second discusses
40methods and interfaces; and the third introduces Go's concurrency primitives.
41Each section concludes with a few exercises so you can practice what you've
Andrew Gerrand43ad89d2014-07-25 10:28:39 +100042learned. You can <a href="//tour.golang.org/">take the tour online</a> or
43<a href="//code.google.com/p/go-tour/">install it locally</a>.
Andrew Gerrandf03b37b2011-10-05 11:12:07 -070044</p>
45
Andrew Gerrandf78d50c2012-03-05 14:31:27 +110046<h3 id="code"><a href="code.html">How to write Go code</a></h3>
47<p>
Andrew Gerrand6f9609a2012-11-13 16:50:44 +010048Also available as a
Andrew Gerrand43ad89d2014-07-25 10:28:39 +100049<a href="//www.youtube.com/watch?v=XCsL89YtqCs">screencast</a>, this doc
Andrew Gerrand6f9609a2012-11-13 16:50:44 +010050explains how to use the <a href="/cmd/go/">go command</a> to fetch, build, and
51install packages, commands, and run tests.
Andrew Gerrandf78d50c2012-03-05 14:31:27 +110052</p>
53
Andrew Gerrand1ca99c82010-05-27 16:47:42 -070054<h3 id="effective_go"><a href="effective_go.html">Effective Go</a></h3>
55<p>
56A document that gives tips for writing clear, idiomatic Go code.
Rob Pike7201b0c2012-02-28 13:35:58 +110057A must read for any new Go programmer. It augments the tour and
Peter Mundyabb0c092010-11-29 10:10:02 +090058the language specification, both of which should be read first.
Andrew Gerrand1ca99c82010-05-27 16:47:42 -070059</p>
60
Andrew Gerrand5dd74172013-09-16 15:47:13 +100061<h3 id="faq"><a href="/doc/faq">Frequently Asked Questions (FAQ)</a></h3>
Andrew Gerrand1ca99c82010-05-27 16:47:42 -070062<p>
Andrew Gerrandd84de092012-02-13 21:22:36 +110063Answers to common questions about Go.
Andrew Gerrand1ca99c82010-05-27 16:47:42 -070064</p>
65
Andrew Gerrand5dd74172013-09-16 15:47:13 +100066<h3 id="wiki"><a href="/wiki">The Go Wiki</a></h3>
Andrew Gerrand539178b2012-03-05 15:07:43 +110067<p>A wiki maintained by the Go community.</p>
Andrew Gerrandd84de092012-02-13 21:22:36 +110068
Andrew Gerrand5dd74172013-09-16 15:47:13 +100069<h4 id="learn_more">More</h4>
Andrew Gerrandc9836be2012-03-08 16:10:55 +110070<p>
Andrew Gerrand5dd74172013-09-16 15:47:13 +100071See the <a href="/wiki/Learn">Learn</a> page at the <a href="/wiki">Wiki</a>
72for more Go learning resources.
Andrew Gerrandc9836be2012-03-08 16:10:55 +110073</p>
74
Andrew Gerrand5dd74172013-09-16 15:47:13 +100075
76<h2 id="references">References</h2>
77
78<h3 id="pkg"><a href="/pkg/">Package Documentation</a></h3>
Andrew Gerrand3bd07692013-05-01 10:00:05 -040079<p>
Andrew Gerrand5dd74172013-09-16 15:47:13 +100080The documentation for the Go standard library.
Andrew Gerrand3bd07692013-05-01 10:00:05 -040081</p>
82
Andrew Gerrand5dd74172013-09-16 15:47:13 +100083<h3 id="cmd"><a href="/doc/cmd">Command Documentation</a></h3>
Rob Pikea97a7c52013-09-12 09:08:59 +100084<p>
Andrew Gerrand5dd74172013-09-16 15:47:13 +100085The documentation for the Go tools.
Rob Pikea97a7c52013-09-12 09:08:59 +100086</p>
87
Andrew Gerrand48ba6fe2013-10-04 09:45:06 +100088<h3 id="spec"><a href="/ref/spec">Language Specification</a></h3>
Andrew Gerrandc9836be2012-03-08 16:10:55 +110089<p>
Andrew Gerrand5dd74172013-09-16 15:47:13 +100090The official Go Language specification.
Andrew Gerrandc9836be2012-03-08 16:10:55 +110091</p>
92
Andrew Gerrand48ba6fe2013-10-04 09:45:06 +100093<h3 id="go_mem"><a href="/ref/mem">The Go Memory Model</a></h3>
Andrew Gerrand5dd74172013-09-16 15:47:13 +100094<p>
95A document that specifies the conditions under which reads of a variable in
96one goroutine can be guaranteed to observe values produced by writes to the
97same variable in a different goroutine.
98</p>
99
Andrew Gerrandd131ffe2014-06-12 13:31:13 +1000100<h3 id="release"><a href="/doc/devel/release.html">Release History</a></h3>
101<p>A summary of the changes between Go releases.</p>
102
Andrew Gerrand5dd74172013-09-16 15:47:13 +1000103
104<h2 id="articles">Articles</h2>
Andrew Gerrandd84de092012-02-13 21:22:36 +1100105
Andrew Gerrand43ad89d2014-07-25 10:28:39 +1000106<h3 id="blog"><a href="//blog.golang.org/">The Go Blog</a></h3>
Andrew Gerrandf78d50c2012-03-05 14:31:27 +1100107<p>The official blog of the Go project, featuring news and in-depth articles by
108the Go team and guests.</p>
109
Andrew Gerrande8636a62012-03-13 11:00:11 +1100110<h4>Codewalks</h4>
Yves Junqueirade3a3972010-11-23 10:43:16 +1100111<p>
Francisco Souzaa786fe82012-03-27 13:35:40 +1100112Guided tours of Go programs.
Yves Junqueirade3a3972010-11-23 10:43:16 +1100113</p>
Andrew Gerrand3bc2d0f2011-09-10 09:35:25 +1000114<ul>
115<li><a href="/doc/codewalk/functions">First-Class Functions in Go</a></li>
116<li><a href="/doc/codewalk/markov">Generating arbitrary text: a Markov chain algorithm</a></li>
117<li><a href="/doc/codewalk/sharemem">Share Memory by Communicating</a></li>
Andrew Gerrandf78d50c2012-03-05 14:31:27 +1100118<li><a href="/doc/articles/wiki/">Writing Web Applications</a> - building a simple web application.</li>
Andrew Gerrand3bc2d0f2011-09-10 09:35:25 +1000119</ul>
Yves Junqueirade3a3972010-11-23 10:43:16 +1100120
Andrew Gerrande8636a62012-03-13 11:00:11 +1100121<h4>Language</h4>
Andrew Gerrand3bc2d0f2011-09-10 09:35:25 +1000122<ul>
Andrew Gerrand5dd74172013-09-16 15:47:13 +1000123<li><a href="/blog/json-rpc-tale-of-interfaces">JSON-RPC: a tale of interfaces</a></li>
124<li><a href="/blog/gos-declaration-syntax">Go's Declaration Syntax</a></li>
125<li><a href="/blog/defer-panic-and-recover">Defer, Panic, and Recover</a></li>
126<li><a href="/blog/go-concurrency-patterns-timing-out-and">Go Concurrency Patterns: Timing out, moving on</a></li>
127<li><a href="/blog/go-slices-usage-and-internals">Go Slices: usage and internals</a></li>
128<li><a href="/blog/gif-decoder-exercise-in-go-interfaces">A GIF decoder: an exercise in Go interfaces</a></li>
129<li><a href="/blog/error-handling-and-go">Error Handling and Go</a></li>
130<li><a href="/blog/organizing-go-code">Organizing Go code</a></li>
Andrew Gerrand3bc2d0f2011-09-10 09:35:25 +1000131</ul>
132
Andrew Gerrande8636a62012-03-13 11:00:11 +1100133<h4>Packages</h4>
Andrew Gerrand3bc2d0f2011-09-10 09:35:25 +1000134<ul>
Andrew Gerrand5dd74172013-09-16 15:47:13 +1000135<li><a href="/blog/json-and-go">JSON and Go</a> - using the <a href="/pkg/encoding/json/">json</a> package.</li>
136<li><a href="/blog/gobs-of-data">Gobs of data</a> - the design and use of the <a href="/pkg/encoding/gob/">gob</a> package.</li>
137<li><a href="/blog/laws-of-reflection">The Laws of Reflection</a> - the fundamentals of the <a href="/pkg/reflect/">reflect</a> package.</li>
138<li><a href="/blog/go-image-package">The Go image package</a> - the fundamentals of the <a href="/pkg/image/">image</a> package.</li>
139<li><a href="/blog/go-imagedraw-package">The Go image/draw package</a> - the fundamentals of the <a href="/pkg/image/draw/">image/draw</a> package.</li>
Andrew Gerrand3bc2d0f2011-09-10 09:35:25 +1000140</ul>
141
Andrew Gerrande8636a62012-03-13 11:00:11 +1100142<h4>Tools</h4>
Andrew Gerrand3bc2d0f2011-09-10 09:35:25 +1000143<ul>
Andrew Gerrand73b8ccb2012-03-07 07:40:21 +1100144<li><a href="/doc/articles/go_command.html">About the Go command</a> - why we wrote it, what it is, what it's not, and how to use it.</li>
Andrew Gerrand5dd74172013-09-16 15:47:13 +1000145<li><a href="/blog/c-go-cgo">C? Go? Cgo!</a> - linking against C code with <a href="/cmd/cgo/">cgo</a>.</li>
Andrew Gerrand98155bd2012-03-27 11:42:01 +1100146<li><a href="/doc/gdb">Debugging Go Code with GDB</a></li>
Andrew Gerrand5dd74172013-09-16 15:47:13 +1000147<li><a href="/blog/godoc-documenting-go-code">Godoc: documenting Go code</a> - writing good documentation for <a href="/cmd/godoc/">godoc</a>.</li>
148<li><a href="/blog/profiling-go-programs">Profiling Go Programs</a></li>
Andrew Gerrandae5bed02014-02-11 09:26:34 +1100149<li><a href="/doc/articles/race_detector.html">Data Race Detector</a> - a manual for the data race detector.</li>
Robin Eklind8e902dd2014-07-09 14:26:37 -0700150<li><a href="/blog/race-detector">Introducing the Go Race Detector</a> - an introduction to the race detector.</li>
151<li><a href="/doc/asm">A Quick Guide to Go's Assembler</a> - an introduction to the assembler used by Go.</li>
Andrew Gerrand3bc2d0f2011-09-10 09:35:25 +1000152</ul>
153
Andrew Gerrand5dd74172013-09-16 15:47:13 +1000154<h4 id="articles_more">More</h4>
155<p>
156See the <a href="/wiki/Articles">Articles page</a> at the
157<a href="/wiki">Wiki</a> for more Go articles.
158</p>
159
160
Andrew Gerrandf78d50c2012-03-05 14:31:27 +1100161<h2 id="talks">Talks</h2>
Andrew Gerrandbab711b2010-07-30 10:36:13 +1000162
Andrew Gerrandf200b722012-03-06 12:50:52 +1100163<img class="gopher" src="/doc/gopher/talks.png"/>
164
Andrew Gerrand0bc952c2012-08-09 08:50:13 +1000165<h3 id="video_tour_of_go"><a href="http://research.swtch.com/gotour">A Video Tour of Go</a></h3>
166<p>
167Three things that make Go fast, fun, and productive:
168interfaces, reflection, and concurrency. Builds a toy web crawler to
169demonstrate these.
170</p>
171
Andrew Gerrand43ad89d2014-07-25 10:28:39 +1000172<h3 id="go_code_that_grows"><a href="//vimeo.com/53221560">Code that grows with grace</a></h3>
Andrew Gerrand5dd74172013-09-16 15:47:13 +1000173<p>
174One of Go's key design goals is code adaptability; that it should be easy to take a simple design and build upon it in a clean and natural way. In this talk Andrew Gerrand describes a simple "chat roulette" server that matches pairs of incoming TCP connections, and then use Go's concurrency mechanisms, interfaces, and standard library to extend it with a web interface and other features. While the function of the program changes dramatically, Go's flexibility preserves the original design as it grows.
175</p>
176
Andrew Gerrand43ad89d2014-07-25 10:28:39 +1000177<h3 id="go_concurrency_patterns"><a href="//www.youtube.com/watch?v=f6kdp27TYZs">Go Concurrency Patterns</a></h3>
Andrew Gerrand4087c1b2012-07-22 16:35:53 -0700178<p>
179Concurrency is the key to designing high performance network services. Go's concurrency primitives (goroutines and channels) provide a simple and efficient means of expressing concurrent execution. In this talk we see how tricky concurrency problems can be solved gracefully with simple Go code.
180</p>
181
Andrew Gerrand43ad89d2014-07-25 10:28:39 +1000182<h3 id="advanced_go_concurrency_patterns"><a href="//www.youtube.com/watch?v=QDDwwePbDtw">Advanced Go Concurrency Patterns</a></h3>
Andrew Gerrand4087c1b2012-07-22 16:35:53 -0700183<p>
Andrew Gerrand5dd74172013-09-16 15:47:13 +1000184This talk expands on the <i>Go Concurrency Patterns</i> talk to dive deeper into Go's concurrency primitives.
Andrew Gerrandbab711b2010-07-30 10:36:13 +1000185</p>
Andrew Gerrand1ca99c82010-05-27 16:47:42 -0700186
Andrew Gerrande8636a62012-03-13 11:00:11 +1100187<h4 id="talks_more">More</h4>
Andrew Gerrand1ca99c82010-05-27 16:47:42 -0700188<p>
Andrew Gerrand5dd74172013-09-16 15:47:13 +1000189See the <a href="/talks">Go Talks site</a> and <a href="/wiki/GoTalks">wiki page</a> for more Go talks.
Andrew Gerrand1ca99c82010-05-27 16:47:42 -0700190</p>
191
Andrew Gerrand5dd74172013-09-16 15:47:13 +1000192
Andrew Gerrandf78d50c2012-03-05 14:31:27 +1100193<h2 id="nonenglish">Non-English Documentation</h2>
194
Andrew Gerrand1748dc32010-10-14 17:25:23 +1100195<p>
Andrew Gerrand5dd74172013-09-16 15:47:13 +1000196See the <a href="/wiki/NonEnglish">NonEnglish</a> page
197at the <a href="/wiki">Wiki</a> for localized
Andrew Gerrandf78d50c2012-03-05 14:31:27 +1100198documentation.
Andrew Gerrand1748dc32010-10-14 17:25:23 +1100199</p>