| # Go version 1 is released |
| 28 Mar 2012 |
| Tags: release, go1 |
| Summary: A major milestone: announcing Go 1, the first stable version of Go. |
| |
| Andrew Gerrand |
| |
| ## |
| |
| .image go1/gophermega.jpg |
| |
| Today marks a major milestone in the development of the Go programming language. |
| We're announcing Go version 1, or Go 1 for short, |
| which defines a language and a set of core libraries to provide a stable |
| foundation for creating reliable products, |
| projects, and publications. |
| |
| Go 1 is the first release of Go that is available in supported binary distributions. |
| They are available for Linux, FreeBSD, Mac OS X and, |
| we are thrilled to announce, Windows. |
| |
| The driving motivation for Go 1 is stability for its users. |
| People who write Go 1 programs can be confident that those programs will |
| continue to compile and run without change, |
| in many environments, on a time scale of years. |
| Similarly, authors who write books about Go 1 can be sure that their examples |
| and explanations will be helpful to readers today and into the future. |
| |
| Forward compatibility is part of stability. |
| Code that compiles in Go 1 should, with few exceptions, |
| continue to compile and run throughout the lifetime of that version, |
| even as we issue updates and bug fixes such as Go version 1.1, 1.2, and so on. |
| The [Go 1 compatibility document](https://golang.org/doc/go1compat.html) |
| explains the compatibility guidelines in more detail. |
| |
| Go 1 is a representation of Go as it is used today, |
| not a major redesign. |
| In its planning, we focused on cleaning up problems and inconsistencies |
| and improving portability. |
| There had long been many changes to Go that we had designed and prototyped |
| but not released because they were backwards-incompatible. |
| Go 1 incorporates these changes, which provide significant improvements |
| to the language and libraries but sometimes introduce incompatibilities for old programs. |
| Fortunately, the [go fix](https://golang.org/cmd/go/#Run_go_tool_fix_on_packages) |
| tool can automate much of the work needed to bring programs up to the Go 1 standard. |
| |
| Go 1 introduces changes to the language (such as new types for [Unicode characters](https://golang.org/doc/go1.html#rune) |
| and [errors](https://golang.org/doc/go1.html#errors)) and the standard |
| library (such as the new [time package](https://golang.org/doc/go1.html#time) |
| and renamings in the [strconv package](https://golang.org/doc/go1.html#strconv)). |
| Also, the package hierarchy has been rearranged to group related items together, |
| such as moving the networking facilities, |
| for instance the [rpc package](https://golang.org/pkg/net/rpc/), |
| into subdirectories of net. |
| A complete list of changes is documented in the [Go 1 release notes](https://golang.org/doc/go1.html). |
| That document is an essential reference for programmers migrating code from |
| earlier versions of Go. |
| |
| We also restructured the Go tool suite around the new [go command](https://golang.org/doc/go1.html#cmd_go), |
| a program for fetching, building, installing and maintaining Go code. |
| The go command eliminates the need for Makefiles to write Go code because |
| it uses the Go program source itself to derive the build instructions. |
| No more build scripts! |
| |
| Finally, the release of Go 1 triggers a new release of the [Google App Engine SDK](https://developers.google.com/appengine/docs/go). |
| A similar process of revision and stabilization has been applied to the |
| App Engine libraries, |
| providing a base for developers to build programs for App Engine that will run for years. |
| |
| Go 1 is the result of a major effort by the core Go team and our many contributors |
| from the open source community. |
| We thank everyone who helped make this happen. |
| |
| There has never been a better time to be a Go programmer. |
| Everything you need to get started is at [golang.org](https://golang.org/). |