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

Steve Francia
spf@golang.org

## The Go project wants to hear from you (again)!

Last year we conducted the first ever
[Go user survey](https://blog.golang.org/survey2016-results). Thanks to all of you,
it was an overwhelming success with over 3500 responses. The survey provided key insights
and helped us better plan and prioritize.

We invite you to participate in the [2017 Go User Survey](https://goo.gl/n9M7SB).

## The Go User Survey

**Who:** If you currently use Go, have used Go in the past, or have any interest in the language,
please help by sharing your feedback to improve Go for you and your fellow
Gophers.

**Where:** Please take this 15-minute survey by **Friday December 8th**: [2017 Go User Survey](https://goo.gl/n9M7SB)

The survey is anonymous and confidential.

**Why:** The Go project leadership depends on your feedback to guide the future
of the Go project. Your responses will help to understand what's going well
and what's not, as well as help us prioritize improvements for the Go
language, libraries and tools.

A few weeks after the survey closes, we will publish the anonymous aggregate results to
the Go blog. See the [2016 Go user survey results](https://blog.golang.org/survey2016-results)
to learn what insights were gained from last year's survey.

## Spread the word!

Please help us spread the word by sharing this post on your social network
feeds, at meetups, around your office and in other communities.
