# Asking Questions

Unlike many projects on GitHub, the Go project does not use its bug tracker for general discussion or asking questions. We only use our bug tracker for tracking bugs and tracking proposals going through the [Proposal Process](https://golang.org/s/proposal-process).

For asking questions, see:

* [The golang-nuts mailing list](https://groups.google.com/d/forum/golang-nuts)

* [The Go Forum](https://forum.golangbridge.org/), a web-based forum

* [Gophers Slack](https://gophers.slack.com), Use the [invite app](https://invite.slack.golangbridge.org/) for access.

* [Stack Overflow](http://stackoverflow.com/questions/tagged/go) with questions tagged "go"

* **IRC** channel #go-nuts on Freenode

If we closed your question on GitHub, we apologize. Please ask the question on one of the above forums.