# Participate in the 2018 Go User Survey
8 Nov 2018
Tags: survey, community
Summary: Please take the 2018 Go User Survey. We want to hear from you!

Ran Tao, Steve Francia
spf@golang.org

## The Go project wants to hear from you, the Go community!

In [2017](https://blog.golang.org/survey2017-results) &
[2016](https://blog.golang.org/survey2016-results), thousands of you helped the
project by lending your voice via the Go user survey. In October, hundreds of
companies helped us understand how enterprises are using Go by taking the Go company
questionnaire. These surveys and questionnaires have played an enormous role in
driving changes to our language and community, from
[our new code of conduct](https://blog.golang.org/conduct-2018), to our
[latest release Go 1.11](https://blog.golang.org/go1.11).

Today we are conducting the 2018 Go user survey. We’d like to hear from **all** Go
users in order to help us to create the best programming language that fits the
needs and desires of the people closest to it. Please help us shape the future of Go
by participating in the 15-minute 2018 Go user survey by November 30th:
[**Go User Survey 2018**](https://goo.gl/8Vzquh).

This survey is _confidential and anonymous_. For more information,
please refer to Google’s privacy policy [here](https://policies.google.com/privacy).

## Spread the word!

We need as many Gophers as possible to participate in this survey to help us better
understand our global user base. We’d be grateful if you would spread the word by
sharing this post on your social network feeds, around the office, at meetups, and in
other communities.
