| # Go: one year ago today |
| 10 Nov 2010 |
| Tags: birthday |
| Summary: Happy 1st birthday, Go! |
| OldURL: /go-one-year-ago-today |
| |
| Andrew Gerrand |
| |
| ## |
| |
| On the 10th of November 2009 we launched the Go project: |
| an open-source programming language with a focus on simplicity and efficiency. |
| The intervening year has seen a great many developments both in the Go project |
| itself and in its community. |
| |
| We set out to build a language for systems programming - the kinds of programs |
| one might typically write in C or C++ - and we were surprised by Go’s |
| utility as a general purpose language. |
| We had anticipated interest from C, C++, and Java programmers, |
| but the flurry of interest from users of dynamically-typed languages like |
| Python and JavaScript was unexpected. |
| Go’s combination of native compilation, |
| static typing, memory management, and lightweight syntax seemed to strike |
| a chord with a broad cross-section of the programming community. |
| |
| That cross-section grew to become a dedicated community of enthusiastic Go coders. |
| Our [mailing list](http://groups.google.com/group/golang-nuts) has over 3,800 members, |
| with around 1,500 posts each month. |
| The project has over 130 [contributors](https://golang.org/CONTRIBUTORS) |
| (people who have submitted code or documentation), |
| and of the 2,800 commits since launch almost one third were contributed |
| by programmers outside the core team. |
| To get all that code into shape, nearly 14,000 emails were exchanged on |
| our [development mailing list](http://groups.google.com/group/golang-dev). |
| |
| Those numbers reflect a labor whose fruits are evident in the project’s code base. |
| The compilers have improved substantially, |
| with faster and more efficient code generation, |
| more than one hundred reported bugs fixed, |
| and support for a widening range of operating systems and architectures. |
| The Windows port is approaching completion thanks to a dedicated group of |
| contributors (one of whom became our first non-Google committer to the project). |
| The ARM port has also made great progress, |
| recently reaching the milestone of passing all tests. |
| |
| The Go tool set has been expanded and improved. |
| The Go documentation tool, [godoc](https://golang.org/cmd/godoc/), |
| now supports the documentation of other source trees (you can browse and |
| search your own code) and provides a ["code walk"](https://golang.org/doc/codewalk/) |
| interface for presenting tutorial materials (among many more improvements). |
| [Goinstall](https://golang.org/cmd/goinstall/) , |
| a new package management tool, allows users to install and update external |
| packages with a single command. |
| [Gofmt](https://golang.org/cmd/gofmt/), |
| the Go pretty-printer, now makes syntactic simplifications where possible. |
| [Goplay](https://golang.org/misc/goplay/), |
| a web-based “compile-as-you-type” tool, |
| is a convenient way to experiment with Go for those times when you don’t |
| have access to the [Go Playground](https://golang.org/doc/play/). |
| |
| The standard library has grown by over 42,000 lines of code and includes |
| 20 new [packages](https://golang.org/pkg/). |
| Among the additions are the [jpeg](https://golang.org/pkg/image/jpeg/), |
| [jsonrpc](https://golang.org/pkg/rpc/jsonrpc/), |
| [mime](https://golang.org/pkg/mime/), [netchan](https://golang.org/pkg/netchan/), |
| and [smtp](https://golang.org/pkg/smtp/) packages, |
| as well as a slew of new [cryptography](https://golang.org/pkg/crypto/) packages. |
| More generally, the standard library has been continuously refined and revised |
| as our understanding of Go’s idioms deepens. |
| |
| The debugging story has gotten better, too. |
| Recent improvements to the DWARF output of the gc compilers make the GNU debugger, |
| GDB, useful for Go binaries, and we’re actively working on making that |
| debugging information more complete. |
| (See the [ recent blog post](https://blog.golang.org/2010/11/debugging-go-code-status-report.html) for details.) |
| |
| It’s now easier than ever to link against existing libraries written in |
| languages other than Go. |
| Go support is in the most recent [SWIG](http://www.swig.org/) release, |
| version 2.0.1, making it easier to link against C and C++ code, |
| and our [cgo](https://golang.org/cmd/cgo/) tool has seen many fixes and improvements. |
| |
| [Gccgo](https://golang.org/doc/gccgo_install.html), |
| the Go front end for the GNU C Compiler, has kept pace with the gc compiler |
| as a parallel Go implementation. |
| It now has a working garbage collector, and has been accepted into the GCC core. |
| We’re now working toward making [gofrontend](http://code.google.com/p/gofrontend/) |
| available as a BSD-licensed Go compiler front end, |
| fully decoupled from GCC. |
| |
| Outside the Go project itself Go is starting to be used to build real software. |
| There are more than 200 Go programs and libraries listed on our [Project dashboard](http://godashboard.appspot.com/project), |
| and hundreds more on [Google Code](http://code.google.com/hosting/search?q=label:Go) |
| and [Github](https://github.com/search?q=language:Go). |
| On our mailing list and IRC channel you can find coders from around the |
| world who use Go for their programming projects. |
| (See our [guest blog post](https://blog.golang.org/2010/10/real-go-projects-smarttwitter-and-webgo.html) |
| from last month for a real-world example.) Internally at Google there are |
| several teams that choose Go for building production software, |
| and we have received reports from other companies that are developing sizable systems in Go. |
| We have also been in touch with several educators who are using Go as a teaching language. |
| |
| The language itself has grown and matured, too. |
| In the past year we have received many feature requests. |
| But Go is a small language, and we’ve worked hard to ensure that any new |
| feature strikes the right compromise between simplicity and utility. |
| Since the launch we have made a number of language changes, |
| many of which were driven by feedback from the community. |
| |
| - Semicolons are now optional in almost all instances. [spec](https://golang.org/doc/go_spec.html#Semicolons) |
| - The new built-in functions `copy` and `append` make management of slices |
| more efficient and straightforward. |
| [spec](https://golang.org/doc/go_spec.html#Appending_and_copying_slices) |
| - The upper and lower bounds may be omitted when making a sub-slice. |
| This means that `s[:]` is shorthand for `s[0:len(s)]`. |
| [spec](https://golang.org/doc/go_spec.html#Slices) |
| - The new built-in function `recover` complements `panic` and `defer` as |
| an error handling mechanism. |
| [blog](https://blog.golang.org/2010/08/defer-panic-and-recover.html), |
| [spec](https://golang.org/doc/go_spec.html#Handling_panics) |
| - The new complex number types (`complex`, |
| `complex64`, and `complex128`) simplify certain mathematical operations. |
| [spec](https://golang.org/doc/go_spec.html#Complex_numbers), |
| [spec](https://golang.org/doc/go_spec.html#Imaginary_literals) |
| - The composite literal syntax permits the omission of redundant type information |
| (when specifying two-dimensional arrays, for example). |
| [release.2010-10-27](https://golang.org/doc/devel/release.html#2010-10-27), |
| [spec](https://golang.org/doc/go_spec.html#Composite_literals) |
| - A general syntax for variable function arguments (`...T`) and their propagation |
| (`v...`) is now specified. |
| [spec](https://golang.org/doc/go_spec.html#Function_Types), |
| [ spec](https://golang.org/doc/go_spec.html#Passing_arguments_to_..._parameters), |
| [release.2010-09-29](https://golang.org/doc/devel/release.html#2010-09-29) |
| |
| Go is certainly ready for production use, |
| but there is still room for improvement. |
| Our focus for the immediate future is making Go programs faster and more |
| efficient in the context of high performance systems. |
| This means improving the garbage collector, |
| optimizing generated code, and improving the core libraries. |
| We’re also exploring some further additions to the type system to make |
| generic programming easier. |
| A lot has happened in a year; it’s been both thrilling and satisfying. |
| We hope that this coming year will be even more fruitful than the last. |
| |
| _If you’ve been meaning to get [back] into Go, now is a great time to do so! Check out the_ |
| [_Documentation_](https://golang.org/doc/docs.html) _and_ [_Getting Started_](https://golang.org/doc/install.html) |
| _pages for more information, or just go nuts in the_ [_Go Playground_](https://golang.org/doc/play/). |