blob: acc029ac3afa7eb24eb676f549e5e4ab4f314e9d [file] [log] [blame] [view]
Jason Buberelf7f7d182015-08-21 16:44:01 -07001Welcome to the Go wiki, a collection of information about the [Go Programming Language](https://golang.org/). [Awesome Go](http://awesome-go.com/) is another great resource for Go programmers, curated by the Go community.
adg87f483a2014-12-09 16:42:53 -08002
Jason Buberel46369702015-08-21 13:21:29 -07003Table of Contents
4=================
adg87f483a2014-12-09 16:42:53 -08005
Jason Buberel46369702015-08-21 13:21:29 -07006+ [Getting started with Go](#getting-started-with-go)
7+ [Working with Go](#working-with-go)
8+ [Learning more about Go](#learning-more-about-go)
9+ [The Go Community](#the-go-community)
10+ [Using the go toolchain](#using-the-go-toolchain)
11+ [Additional Go Programming Wikis](#additional-go-programming-wikis)
12+ [Onlines Services that work with Go](#onlines-services-that-work-with-go)
13+ [Troubleshooting Go Programs in Production](#troubleshooting-go-programs-in-production)
14+ [Contributing to the Go Project](#contributing-to-the-go-project)
15+ [Platform Specific Information](#platform-specific-information)
16+ [Release Specific Information](#release-specific-information)
adg87f483a2014-12-09 16:42:53 -080017
adg87f483a2014-12-09 16:42:53 -080018
Jason Buberel46369702015-08-21 13:21:29 -070019## Getting started with Go
20
21 - [The Go Tour](http://tour.golang.org) is the best place to start.
22 - [Effective Go](https://golang.org/doc/effective_go.html) will help you learn how to write idiomatic Go code.
23 - [Go standard library documentation](https://golang.org/pkg/) to familiarize yourself with the standard library.
24 - [Use the Go Playground](http://play.golang.org) to test out Go programs in your browser.
Jason Buberel775f3d22015-08-21 13:34:00 -070025 - Still not convinced? Check out this list of [Go Users](GoUsers) and a few of their [Success tories](SuccessStories). We've also assembled a long list of reasons [why you should give Go a try](whygo).
Jason Buberel46369702015-08-21 13:21:29 -070026
27## Working with Go
28
29Ready to write some Go code of your own? Here are a few links to help you get started.
30
31 - Install and Setup your Environment
32 - Start here: [Official Installation Documentation](https://golang.org/doc/install)
33 - If you prefer to install from source, [read this first](https://golang.org/doc/install/source).
Jason Buberel775f3d22015-08-21 13:34:00 -070034 - [InstallFromSource](InstallFromSource) - Additional tips on source installs.
35 - Having installation problems? [InstallTroubleShooting](InstallTroubleShooting)
Jason Buberel46369702015-08-21 13:21:29 -070036 - Make sure you have your [$GOPATH environment variable set correctly](https://golang.org/doc/install/source#gopath)
Jason Buberel775f3d22015-08-21 13:34:00 -070037 - If you need additional tips on using [$GOPATH, go here](GOPATH).
38 - [MultipleGoRoots](MultipleGoRoots) - More advanced information on working with multiple go installations and the `$GOROOT` variable.
39 - [Go IDEs and Editors](IDEsAndTextEditorPlugins) - Information on how to use your favorite editor with Go.
Jason Buberel46369702015-08-21 13:21:29 -070040 - Finding Go Libraries & Tools
41 - Start by searching [godoc.org](http://godoc.org)
Jason Buberel775f3d22015-08-21 13:34:00 -070042 - Then check this list of [Go open source projects](Projects) for additional search tools and curated lists.
43 - [Managing your dependencies](PackageManagementTools) - An overview of the tools you can use to manage the libraries that your appliction depends on.
Jason Buberel46369702015-08-21 13:21:29 -070044 - Publishing Go Packages as Open Source
Jason Buberel775f3d22015-08-21 13:34:00 -070045 - Getting ready to publish your package? [Start here.](PackagePublishing)
Jason Buberel016aaf82015-08-23 15:51:34 -070046 - [The Go Checklist](https://github.com/matttproud/gochecklist) - A comprehensive guide for publishing a project.
Jason Buberel775f3d22015-08-21 13:34:00 -070047 - [How to layout your GitHub repo](GithubCodeLayout) to make it easy to for other Go programmers to use with the `go get` command.
Jason Buberel4e8bd432015-08-23 17:58:11 -070048 - [Go Package, Go](https://johnsto.co.uk/blog/go-package-go) - A few recommendations for making Go packages easy to use.
Jason Buberel46369702015-08-21 13:21:29 -070049
50## Learning more about Go
51
Jason Buberelcc8e0f02015-08-29 08:40:48 -070052Once you have an overview of the language, here are resources you can use to learn more.
Jason Buberel46369702015-08-21 13:21:29 -070053
Jason Buberel6c3bd9e2015-08-23 11:04:43 -070054 - [Learning Go](Learn) - A collection of resources for learning Go - beginner to advanced.
Jason Buberel016aaf82015-08-23 15:51:34 -070055 - [The Go Bridge Foundry](https://github.com/gobridge) - A member of the [Bridge Foundry](http://bridgefoundry.org/) family, offering a complete set of free Go training materials with the goal of bringing Go to underrepresented communities.
Jason Buberel6c3bd9e2015-08-23 11:04:43 -070056 - [More on concurrency](LearnConcurrency)
Guillaume Laforgecb00bf32015-08-24 06:11:38 +020057 - [More on error handling](LearnErrorHandling)
Jason Buberel6c3bd9e2015-08-23 11:04:43 -070058 - [More on server programming](LearnServerProgramming)
59 - [More on testing](LearnTesting)
Jason Buberelbfc0f3f2015-08-23 11:06:00 -070060 - [Books](Books) - A list of Go books that have been published (ebook, paper)
Jason Buberel46369702015-08-21 13:21:29 -070061 - Videos, Talks and Presentations
Jason Buberelf7f7d182015-08-21 16:44:01 -070062 - [GopherVids](http://gophervids.appspot.com/) is a searchable index of videos about Go.
Jason Buberel775f3d22015-08-21 13:34:00 -070063 - [GoTalks](GoTalks) - A collection of talks from Go conferences and meetups.
64 - [Screencasts](Screencasts)
Jason Buberelcdf53bf2015-08-29 07:01:31 -070065 - [Podcasts](Podcasts) - Episdoes featuring Go
Jason Buberelbfc0f3f2015-08-23 11:06:00 -070066 - [Articles](Articles) - A collection of articles to help you learn more about Go.
Jason Buberel8ccafcd2015-08-28 10:52:53 -070067 - [Training](Training) - Free and commercial, online and classroom training for Go.
Jason Buberelbfc0f3f2015-08-23 11:06:00 -070068 - [Universtiry Courses](Courses) - A list of CS programs and classes using Go.
Jason Buberel775f3d22015-08-21 13:34:00 -070069 - [Resources for non-English speakers](NonEnglish)
Jason Buberel46369702015-08-21 13:21:29 -070070
71## The Go Community
72
Jason Buberel016aaf82015-08-23 15:51:34 -070073Here are some of the places where you can find Gophers online. To get a sense of what it means to be a member of the Go community, read [Damian Gryski's keynote from the GolankUK 2015 conference](https://medium.com/@dgryski/the-go-community-f0d00e3a19e) or watch [Andrew Gerrand's closing keynote from GopherCon 2015](https://www.youtube.com/watch?v=0ht89TxZZnk).
Jason Buberel46369702015-08-21 13:21:29 -070074
75- Mailing Lists
76 - The mailing list for Go users is [golang-nuts](https://groups.google.com/forum/#!forum/golang-nuts) - very high traffic.
Jason Buberel775f3d22015-08-21 13:34:00 -070077 - Before you post, [check to see if it's already been answered](http://stackoverflow.com/tags/go), then read [these tips on how to ask a good question](HowToAsk)
Jason Buberel46369702015-08-21 13:21:29 -070078 - For discussios about the core Go open source project, join [golang-dev](https://groups.google.com/forum/#!forum/golang-dev).
79 - To get just our release announcements, join [golang-announce](https://groups.google.com/forum/#!forum/golang-announce)
80- Chat, discussion and other forums
81 - We have a [Gophers Slack Channel](http://gophers.slack.com/). Requires you to [request membership here](http://blog.gopheracademy.com/gophers-slack-community/)
82 - For IRC fans there is #go-nuts on irc.freenode.net which is [indexed here](https://botbot.me/freenode/go-nuts/).
83 - There is also a [/r/golang](http://reddit.com/r/golang) sub-reddit.
84 - On Twitter, follow the [@golang](https://twitter.com/golang) account and keep tabs on the [#golang](https://twitter.com/search?q=%23golang&src=typd) hashtag.
85 - We've also got a landing page on [Stack Overvflow](http://stackoverflow.com/tags/go) for Go Q&A.
86- User Groups & Meetups - There are [Go Meetups in many cities](http://www.meetup.com/find/?allMeetups=false&keywords=golang&radius=Infinity&userFreeform=Sunnyvale%2C+CA&mcId=z94086&mcName=Sunnyvale%2C+CA&sort=recommended&eventFilter=mysugg)
Jason Buberel775f3d22015-08-21 13:34:00 -070087 - See here for [additional information GoUserGroups](GoUserGroups)
Jason Buberel0f8396c2015-08-22 12:59:19 -070088- [Conferences](Conferences) - A list of upcoming and past Go conferences and major events.
Jason Buberel7893d432015-08-22 15:32:19 -070089- A comprehensive list of companies using Go: [Go Users](GoUsers)
Jason Buberela56980d2015-08-22 15:19:58 -070090- Learn more about the [Go Gohper images](Gopher) by Renee French.
Jason Buberel46369702015-08-21 13:21:29 -070091
92## Using the go toolchain
93
94 - Start with the standard documentation for the `go` command [available here](https://golang.org/cmd/go/)
Jason Buberelf9bec162015-08-23 08:23:38 -070095 - Using the Go 1.5 `GO15VENDOREXPERIMENT`
96 - Start here for the [official documentation](https://golang.org/cmd/go/#hdr-Vendor_Directories).
97 - [Overview with examples](http://icanhazdowntime.org/post/2015-07-09-go-vendor-experiment/) by [@freeformz](https://twitter.com/freeformz).
Jason Buberel72542582015-08-23 08:38:21 -070098 - See also [PackageManagementTools](PackageManagementTools) for additional details.
Jason Buberel8b389db2015-08-23 10:01:04 -070099 - Shared libraries and Go (buildmode)
Jason Buberel34c728b2015-08-26 12:17:27 -0700100 - [Go Shared Libraries](https://github.com/jbuberel/buildmodeshared) - Examples for creating and using shared libraries from Go and Python.
Jason Buberelf9bec162015-08-23 08:23:38 -0700101 - [gohttplib](https://github.com/shazow/gohttplib) - An experiment in using Go 1.5 buildmode=c-shared.
Jason Buberel8b389db2015-08-23 10:01:04 -0700102 - [Sharing Golang Packages to C](http://blog.ralch.com/tutorial/golang-sharing-libraries/) - A tutorial by [@ralch](https://twitter.com/ralch).
Jason Buberel34c728b2015-08-26 12:17:27 -0700103 - [Calling Go libraries from Python](https://blog.filippo.io/building-python-modules-with-go-1-5/) - by Filippo Valsorda
104 - [Calling Go libraries from Ruby](http://c7.se/go-and-ruby-ffi/) - by Peter Hellberg
Jason Buberelf9bec162015-08-23 08:23:38 -0700105 - See the wikis below for additional details:
Jason Buberel775f3d22015-08-21 13:34:00 -0700106 - [GoGetTools](GoGetTools)
107 - [GoGetProxyConfig](GoGetProxyConfig)
108 - [cgo](cgo)
109 - [CompilerOptimizations](CompilerOptimizations)
110 - [GccgoCrossCompilation](GccgoCrossCompilation)
111 - [GcToolchainTricks](GcToolchainTricks)
112 - [GoGenerateTools](GoGenerateTools)
Jason Buberel46369702015-08-21 13:21:29 -0700113
114## Additional Go Programming Wikis
Jason Buberelda855892015-08-22 15:15:20 -0700115
Jason Buberel6f730522015-08-22 15:18:54 -0700116 - [Why Go doesn't Support Generics: A Summary of Go Generics Discussions](https://docs.google.com/document/d/1vrAy9gMpMoS3uaVphB32uVXX4pi-HnNjkMEgyAHX4N4/preview) - Start here before you join the debate.
Jason Buberelda855892015-08-22 15:15:20 -0700117 - Concurrency
118 - [Timeouts](Timeouts) - Abandon async calls that take too long
119 - [LockOSThread](LockOSThread)
120 - [MutexOrChannel](MutexOrChannel) - When to use one vs the other
121 - [RaceDetector](RaceDetector) - How to detect and fix race conditions
Jason Buberel46369702015-08-21 13:21:29 -0700122 - Working with Databases
Jason Buberele6f90452015-08-24 06:47:16 -0700123 - [database/sql](http://go-database-sql.org/) - Online tutorial for working with the database/sql package.
Jason Buberel775f3d22015-08-21 13:34:00 -0700124 - [SQLDrivers](SQLDrivers)
125 - [SQLInterface](SQLInterface)
Jason Buberelca3d2012015-08-25 07:30:52 -0700126 - From other languages
127 - [Go for Java Programmers](https://www.nada.kth.se/~snilsson/go_for_java_programmers/)
128 - [Go for C++ Programmers](GoForCPPProgrammers)
Jason Buberel775f3d22015-08-21 13:34:00 -0700129 - [Comments](Comments)
130 - [CommonMistakes](CommonMistakes)
131 - [Errors](Errors)
132 - [GcToolchainTricks](GcToolchainTricks)
Jason Buberel775f3d22015-08-21 13:34:00 -0700133 - [GoStrings](GoStrings)
Jason Buberel775f3d22015-08-21 13:34:00 -0700134 - [Hashing](Hashing)
135 - [HttpFetch](HttpFetch)
136 - [HttpStaticFiles](HttpStaticFiles)
137 - [InterfaceSlice](InterfaceSlice)
138 - [Iota](Iota)
Jason Buberel775f3d22015-08-21 13:34:00 -0700139 - [MethodSets](MethodSets)
Jason Buberel775f3d22015-08-21 13:34:00 -0700140 - [PanicAndRecover](PanicAndRecover)
Jason Buberel775f3d22015-08-21 13:34:00 -0700141 - [Range](Range)
142 - [RateLimiting](RateLimiting)
143 - [Rationales](Rationales)
144 - [SendingMail](SendingMail)
145 - [SignalHandling](SignalHandling)
146 - [SimultaneousAssignment](SimultaneousAssignment)
147 - [SliceTricks](SliceTricks)
148 - [Switch](Switch)
149 - [TableDrivenTests](TableDrivenTests)
Jason Buberelda855892015-08-22 15:15:20 -0700150
Jason Buberel46369702015-08-21 13:21:29 -0700151
152## Onlines Services that work with Go
153
154If you're looking for services that support Go, here's a list to get you started.
155
156 - Cloud Computing - Go is well supported on most cloud service providers.
157 - [Amazone Web Services](https://github.com/aws/aws-sdk-go)
158 - [Azure](https://github.com/Azure/azure-sdk-for-go)
159 - [Digital Ocean](https://github.com/digitalocean/godo)
160 - [Google Cloud Platform and App Engine for Go](https://cloud.google.com/appengine/docs/go/)
161 - [Heroku](https://github.com/heroku/heroku-buildpack-go)
Jason Buberel775f3d22015-08-21 13:34:00 -0700162 - See here for [information on additional providers](ProviderIntegration)
Jason Buberelcf269d62015-08-28 17:52:14 -0700163 - [Continuous Integration and Continuous Deployment](HostedContinuousIntegration) - Go is well supported by most CI/CD framworks
Jason Buberel46369702015-08-21 13:21:29 -0700164 - Monitoring/Logging
165 - [DeferPanic](http://deferpanic.com) - Dedicated Go application performance monitoring.
166 - Package and Dependency Management
167 - [Gopkg.in](http://labix.org/gopkg.in) is a source for stable Go libraries, provided by Gustavo Niemeyer.
Jason Bubereld1c6b892015-08-22 08:23:39 -0700168 - [Stable Lib](https://stablelib.com/) is a service that provides stable Go packages with long-term support.
Jason Buberel46369702015-08-21 13:21:29 -0700169
170## Troubleshooting Go Programs in Production
171
172 - Understand the performance of you Go apps using the [pprof package](http://blog.golang.org/profiling-go-programs)
173 - Heap Dumps
Jason Buberel775f3d22015-08-21 13:34:00 -0700174 - [heapdump13](heapdump13)
175 - [heapdump14](heapdump14)
Jason Buberel46369702015-08-21 13:21:29 -0700176
177## Contributing to the Go Project
178
179 - Start by reading the [Go Contribution Guidelines](https://golang.org/doc/contribute.html)
180 - If you'd like to propose a change to the Go project, start by reading the [Go Change Proposal Process](https://github.com/golang/proposal)
Jason Buberel775f3d22015-08-21 13:34:00 -0700181 - An archive of [design documents is also available](DesignDocuments)
182 - Go releases happen on ~6 month intervals. [See here for more information](Go-Release-Cycle)
183 - Want to know more about how the [Go source sub-repositories are structured?](SubRepositories)
Jason Buberel46369702015-08-21 13:21:29 -0700184 - The Go project requires that all code be reviewed before it is submitted.
Jason Buberel775f3d22015-08-21 13:34:00 -0700185 - Read more about our [code review practices](CodeReview)
186 - If you're commenting on code under review, please read [these guidelines](CodeReviewComments)
Jason Buberel46369702015-08-21 13:21:29 -0700187 - Issues
188 - Bug reports and feature requests should be filed using the [Github issue tracker](https://github.com/golang/go/issues)
Jason Buberel775f3d22015-08-21 13:34:00 -0700189 - Want to understand how we [handle issues that are reported?](HandlingIssues)
Jason Buberel46369702015-08-21 13:21:29 -0700190 - Project Dashboards
Jason Buberel775f3d22015-08-21 13:34:00 -0700191 - [Go Builds Dashboard info](DashboardBuilders)
192 - [Performance Dashboard info](PerfDashboard)
Jason Buberel46369702015-08-21 13:21:29 -0700193
194## Platform Specific Information
195
Jason Buberel775f3d22015-08-21 13:34:00 -0700196 - Considering porting Go to a new platform? [Read our porting policy first](PortingPolicy)
197 - [Mobile](Mobile)
198 - [Ubuntu](Ubuntu)
Jason Buberel46369702015-08-21 13:21:29 -0700199 - Windows
Jason Buberel775f3d22015-08-21 13:34:00 -0700200 - [WindowsBuild](WindowsBuild)
201 - [WindowsCrossCompiling](WindowsCrossCompiling)
202 - [WindowsDLLs](WindowsDLLs)
203 - [WindowsSupport](WindowsSupport)
204 - [GoArm](GoArm)
205 - [ChromeOS](ChromeOS)
206 - [NetBSD](NetBSD)
207 - [OpenBSD](OpenBSD)
208 - [FreeBSD](FreeBSD)
209 - [NativeClient](NativeClient)
Jason Buberel46369702015-08-21 13:21:29 -0700210
211## Release Specific Information
212
Jason Buberel775f3d22015-08-21 13:34:00 -0700213 - [Go1point1Gotchas](Go1point1Gotchas)
214 - [OlderVersions](OlderVersions)
minux27be2442014-12-11 00:03:02 -0800215
216Notes:
217
218- Please refrain from changing the title of the wiki pages, as some of them might be linked to from [golang.org](https://golang.org) or other websites.