# Nine years of Go
10 Nov 2018
Tags: community, birthday
Summary: Happy 9th birthday, Go!

Steve Francia

## Introduction

Today marks the ninth anniversary of the day we open-sourced our initial sketch of Go.
On each anniversary we like to take time to reflect on what has happened over the past year.
The past 12 months have been a breakout year for the Go language and community.

## Go Love & Adoption

Thanks to all of you, 2018 was an amazing year for Go!
In multiple industry surveys Gophers expressed how happy they were using Go,
and many non-Go developers indicated they intended to learn Go before any other language.

In [Stack Overflow’s 2018 Developer Survey](https://insights.stackoverflow.com/survey/2018#most-loved-dreaded-and-wanted),
Go retained its coveted spot in both the top 5 most loved and top 5 most wanted languages.
People who use Go love it, and people who aren’t using Go want to.

In [ActiveState’s 2018 Developer Survey](https://www.activestate.com/developer-survey-2018-open-source-runtime-pains),
Go topped the charts with 36% of users responding they were “Extremely Satisfied” using Go
and 61% responding “Very Satisfied” or better.

[JetBrains’s 2018 Developer Survey](https://www.jetbrains.com/research/devecosystem-2018/) awarded Go
the “Most promising language” with 12% of respondents using Go today and 16% intending to use Go in the future.

In [HackerRank’s 2018 Developer Survey](https://research.hackerrank.com/developer-skills/2018/),
38% of developers responded that they were intending to learn Go next.

We are excited about all of our new gophers and actively working to improve our educational and community resources.

## Go Community

It’s hard to believe that it’s only been five years since
the first Go conferences and Go meetups.
We’ve seen major growth in this area of community leadership over the last year.
There are now over 20 [Go conferences](https://github.com/golang/go/wiki/Conferences)
and over 300 [Go-related meetups](https://www.meetup.com/topics/golang/) spanning the globe.

Thanks to the hard work put into these many conferences and meetups,
there have been hundreds of great talks this year.
Here are a few of our favorite talks specifically discussing the growth of our community
and how we can better support gophers worldwide.

  - [Writing Accessible Go](https://www.youtube.com/watch?v=cVaDY0ChvOQ), by Julia Ferraioli at GopherCon
  - [The Importance of Beginners](https://www.youtube.com/watch?v=7yMXs9TRvVI), by Natalie Pistunovich at GopherCon
  - [The Legacy of Go, Part 2](https://www.youtube.com/watch?v=I_KcpgxcFyU), by Carmen Andoh at GothamGo
  - [Growing a Community of Gophers](https://www.youtube.com/watch?v=dl1mCGKwlYY), by Cassandra Salisbury at Gopherpalooza

On that theme, this year we also [revised our code of conduct](https://blog.golang.org/conduct-2018)
to better support inclusivity in the Go community.

The Go community is truly global.
At GopherCon Europe in Iceland this past summer, gophers literally spanned the gap between the continents.

.image 9years/9years-iceland.jpg _ 800

_(Photo by Winter Francia.)_

## Go 2

After five years of experience with Go 1, we’ve started looking at
what we should change about Go to better support
[programming at scale](https://talks.golang.org/2012/splash.article).

Last spring, we published a [draft design for Go modules](https://blog.golang.org/versioning-proposal),
which provide an integrated mechanism for versioning and package distribution.
The most recent Go release, Go 1.11, included
[preliminary support for modules](https://golang.org/doc/go1.11#modules).

Last summer we published
[early draft designs](https://blog.golang.org/go2draft)
for how Go 2 might better support error values, error handling, and generic programming.

We are excited about refining these designs with the community’s help as we work
[toward Go 2](https://blog.golang.org/toward-go2).

## Go Contributors

The Go project has been increasing in the number of contributions from the community for several years.
The project hit a major milestone in mid-2018 when, for the first time,
we had more contributions coming from the community than the Go team.

.image 9years/9years-graph.png _ 600

## Thank You

On a personal note, from the entire Go team,
we want to sincerely thank all of you.
We feel privileged to be able to work on the Go project
and are grateful to the many gophers around the world who have joined us.

We are especially thankful for the thousands of volunteers
who help through mentorship, organizing, contributing,
and supporting your fellow gophers.
You have made Go what it is today.
