### 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.

Spread the word using hashtag [#GoReleaseParty](https://twitter.com/hashtag/goreleaseparty)

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.

- Bengaluru, India - Feb 16th 7.00pm at Gojek office. Contact [@rbharshetty] (https://twitter.com/rBharshetty) or view the [meetup] (https://www.meetup.com/Golang-Bangalore/events/237156123/) for details
- Munich, Germany: Feb 15 7pm at Stylight. Contact [@lc0d3r](https://twitter.com/lc0d3r), [@munich_gophers](https://twitter.com/munich_gophers) or view the [meetup](https://www.meetup.com/Munich-Gophers-Go-User-Group/events/236962991/) for details.
- Washington DC: Feb 16 7pm at MakeOffices Dupont. View the [meetup](https://www.meetup.com/Golang-DC/events/236696696/) for details.
- Columbia, MD: Feb 16 5:30pm at Tier 1 Consulting Group. See [event page](https://www.meetup.com/Go-Maryland/events/237121509/)
- 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/)
- Florianólis, SC, Brazil: Feb 16 7pm at Neoway Business Solutions. Contact [@ricardolonga](https://twitter.com/ricardolonga) for more info or go to [Floripa Gophers](https://www.meetup.com/Floripa-Gophers/events/236729070/)
- São Paulo, Brazil: Feb 16 7pm at TBD. Contact [@vdemario](https://twitter.com/vdemario) for more info or check the [meetup page](https://www.meetup.com/golangbr/)
- [@GolangParis](https://twitter.com/golangparis), France, Feb 16 7pm at TBD, see [event page](https://www.meetup.com/fr-FR/Golang-Paris/events/236696058). Ping: gaufres [at] golangparis.org.
- 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/)
- Novosibirsk, Russia: Feb 16 7pm at Academpark. Contact [@lkalneus](https://twitter.com/lkalneus) for more info. Also join [Go Nsk group](https://www.meetup.com/golangnsk/)
- PDXGo: Feb 16 6:30 pm at ESRI. View the [meetup](https://www.meetup.com/PDX-Go/events/236702058/) for details.
- [@DenverGophers](https://twitter.com/DenverGophers) Feb 16 6:00pm at Comcast Viper. View the [meetup](http://bit.ly/denver-1-8-release-party) or contact [@apriendeau](https://twitter.com/apriendeau) for more info.
- [@MinneapolisGo](https://twitter.com/MinneapolisGo) Feb 16 6:00pm at Agosta. View the [meetup](https://www.meetup.com/Minneapolis-Ultimate-Golang/events/236698705/) or contact [@corylanou](https://twitter.com/corylanou) for more info.
- Amsterdam, the Netherlands: Feb 16 6pm at [Wercker](http://www.wercker.com). View the [meetup](https://www.meetup.com/golang-amsterdam/events/236723017/) for more details and RSVP.
- Wroclaw, Poland: Feb 16 7pm at Kuznicza 10. View the [meetup](https://www.meetup.com/GoLang-User-Group-Wroclaw/events/236727341/) or contact [@viru](https://github.com/viru/) for more details.
- Stockholm, Sweden: Feb 21 6pm at TV4. View the [meetup](https://www.meetup.com/Go-Stockholm/events/236748141/) or contact [@marcusolsson](https://twitter.com/marcusolsson/) for more details.
- New York, NY: Feb 16 at 7PM at TBD. Will announce the event on [meetup](https://www.meetup.com/golanguagenewyork/). Contact [@wikiwalk](https://twitter.com/wikiwalk) for more details. 
- Madrid, Spain: Feb 16 at 7:30PM at source{d}, The event will be announced on [meetup](https://www.meetup.com/go-mad/). Contact [@mcuadros_](https://twitter.com/mcuadros_) for more details. 
- Murcia, Spain: Feb 16 at 7:00PM at CEEIM. Will announce the event on [meetup](https://www.meetup.com/Gophers-Murcia/). Contact [@ANPez](https://twitter.com/ANPez) for more details. 
- Taipei, Taiwan: Feb 16 at 7:30PM at [Dcard](https://www.dcard.tw). Will announce the event on [meetup](http://golang.kktix.cc/). Contact [@kkdai](https://twitter.com/Evan_Lin) for more details. 
- Budapest, Hungary: Feb 16 at 7:00PM at [Prezi House if Ideas](https://www.google.com/maps?f=q&hl=en&q=1065+Hajós+street+35.,+Budapest,+hu). RSVP on the [meetup page](https://www.meetup.com/go-budapest/events/236811843/). For details please contact the organizer: [@gulyasm](https://twitter.com/gulyasm)
- Reston, VA: Feb 16 at 6:45PM at Comcast. See more details and RSVP on the [meetup page](https://www.meetup.com/Golang-Reston/events/236807731/).
- Lille, France: Feb 16 at 6:45PM at [Epitech Lille](https://goo.gl/maps/C6H7CjZWrFv). [Meetup page](https://www.meetup.com/GDG-Lille/events/236825262).
- Hamburg, Germany: Feb 16 at 7PM place at [loodse](https://loodse.com/en/). [Meetup page](https://www.meetup.com/Go-User-Group-Hamburg/events/236813440/).
- Okayama, Japan: Feb 16 7pm at Kurashiki Coffee Shop. See an [event page](https://connpass.com/event/48433/) or contact [@qt_luigi](https://twitter.com/qt_luigi) for more info.
- Phoenix, AZ: Feb 16 at 6:30PM, venue TBD. See [event page](https://www.meetup.com/Golang-Phoenix/events/236891853/) or contact [@golangPhoenix](https://twitter.com/golangPhoenix)
- Toronto, Canada: Firkin on King, See [event page](https://www.meetup.com/go-toronto/events/236855730/)
- Seattle, WA: Feb 16 at 6PM at Uber, See [event page](https://www.meetup.com/golang/events/236803478/)
- Vancouver, BC: Feb 16 at 6PM at [Hootsuite](http://hootsuite.com), See [event page](https://www.meetup.com/golangvan/)
- San Francisco, CA: Feb 16 at 6:30PM, venue TBD. See [event page](https://www.meetup.com/golangsf/events/236673793/)
- Copenhagen, Denmark: Feb 16th at 6PM, at Vivino. See [event page](https://www.meetup.com/Go-Cph/events/233646078/) or contact [@phr0e](https://twitter.com/phr0e) or [@CphGophers](https://twitter.com/CphGophers)
- Leeds, England, UK: Feb 16th at 6PM, at Infinity Works's offices. See [event page](https://www.eventbrite.co.uk/e/go-18-release-party-tickets-31217190457)
- Zurich, CH, Feb 23rd at 6:30PM at Unic AG offices in Altstetten. See [event page](https://www.meetup.com/Zurich-Gophers/events/236745236/)
- Framingham, Ma - Feb 16th 7pm - See [event page](https://www.meetup.com/Framingham-Golang-Meetup/events/236999473/)
- Tokyo, Japan - Feb 16th 7pm - See https://gocon.connpass.com/event/48281/
- San Diego, CA @ ScouRED - Feb 16th 6pm - See [event page](https://www.meetup.com/sdgophers/events/236202461/), contact [@carlisia](https://twitter.com/carlisia)
- Philadelphia, PA - Feb 16th 6PM, at Sidecar. See [Meetup page](https://www.meetup.com/GoLangPhilly/events/236965685/) or contact [@golangphilly](https://twitter.com/golangphilly)
- Milan, Italy - Feb 16th 6.30pm, at Ibuildings' offices. For info tweet to [@kmox83](https://twitter.com/kmox83) or [@mavimo](https://twitter.com/mavimo) - See the [event page](https://www.meetup.com/Golang-Milano/)
- Singapore - Feb 16th 7.30pm, at Singapore Power office. See the [Meetup page](https://www.meetup.com/golangsg/events/236725569/) or tweet to [@golangSG](https://twitter.com/golangSG)
- Minsk, Belarus - Feb 16th 7.00pm at Juno. Details will follow up.

_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.