### What's happening?
To celebrate the release of Go 1.8 we're to organising a world wide release party on February the 16th, 2017. 

#### Hang on, did you say Go 1.8 ships on the 16th of February?
Nope! Go 1.8 is in good shape to ship in early February, but no firm release date has been published; it might be as early as the 1st of Feb, or it might not.

### Sounds awesome, how can you get involved?
- If you host a Go user group or meetup, schedule a meetup on the 16th of Feb, or as close to it as convenient, and celebrate with Gophers around the world.
- If you're a member of a Go user group or meetup, pester your organiser and let them know you'd like to participate.

After the event post a photo, make a video, write a blog post, scribble on your Facebook wall, or tweet something pithy. Let's see how big we can make the celebration.

Don't forget to add your meetup's details :point_down: right here.

#### Who's involved?
Here is a list of the groups who are participating.

- Halifax, Nova Scotia, Canada: Feb 16 7pm at Volta Labs. Contact [@danp](https://twitter.com/danp128) for more info.
- Belo Horizonte, MG, Brazil: Feb 16 7pm at The Plant. Contact [@joaoh82](https://twitter.com/joaoh82) for more info or go to [Go Belo Horizonte](https://www.meetup.com/go-belo-horizonte/)
- Sydney, Australia: Feb 16 6pm at TBD. Contact [@chewxy](https://twitter.com/chewxy) for more info. The [event page](https://www.meetup.com/golang-syd/events/236680493/)

_If your group is not listed here yet, edit the page and add yourself._
_Organisers, once you've added your group, consider tweeting out a link to the page to raise awareness._

### Stay in touch

Trying to co-ordinate dozens of meetup groups around the globe will be challenging. Here are some ways you can plan your event, and keep up to date. 

As always, if you get stuck, or need help, please [contact the organisers directly](https://github.com/golang/go/wiki/Go-1.8-release-party#no-seriously-whos-organising-this), we're here to help.

##### Slack Channel
We have a channel for the [release party](https://gophers.slack.com/messages/go-release-party/) on the [Gophers Slack](https://gophers.slack.com/messages/go-release-party/). If you need an invite to Slack, [you can request an automatic invite with this link](https://invite.slack.golangbridge.org/).

##### Mailing list
We have set up a [mailing list for meetup organisers](https://groups.google.com/forum/#!forum/go-meetup-organisers) to ask questions.

### What happens in a release party?
As with the previous [Go 1.6](https://github.com/golang/go/wiki/Go-1.6-release-party) and Go 1.7 release parties, this is a great opportunity to spread the word about the improvements landing 1.8, and the plans for the 1.9 development cycle.

#### Resources

A sample slide deck that you can use is [available here](https://talks.godoc.org/github.com/davecheney/go-1.8-release-party/presentation.slide#1) ([source](https://github.com/davecheney/go-1.8-release-party))

_Please send PR's with corrections/additions_

[Here's a link to the _draft_ Go 1.8 release notes](http://beta.golang.org/doc/go1.8).

### What'll happen if Go 1.8 comes out before the 16th?
This is likely to happen, but many meetups have a January date scheduled and don't want to hold two meetups so close together. The 16th is an arbitrary date that a quorum of meetups could find that didn't conflict with their existing schedules. 

If you're a meetup organiser and can hit the Feb 16th, awesome, but your participation is more important than being able to organise your group for an exact date.

### What'll happen if Go 1.8 isn't out by the 16th?
Well ... at least we'll have each other. 

The feature set of Go 1.8 isn't going to change in over the next month. If Go 1.8 ships after the 16th, it will be a little anticlimactic that we jumped the gun, but it's not a big deal.

### Who's organising this?
Well, if you run a Go meetup, you are. It can't be a worldwide release party without meetups around the globe.

#### No, seriously, who's organising this?
Here are the organisers so far:
- [Dave Cheney](mailto://dave@cheney.net) - @davecheney
- [João Henrique Machado Silva](mailto://joaoh82@gmail.com) - [@joaoh82](https://twitter.com/joaoh82)

_Want to help? Edit this page and add yourself_

If you have questions, please reach out to one of the organisers.