# Go Conferences and Major Events

## Upcoming

Please keep all items in chronological order.

| Name |  Date | Location | Website | 
|-------|-----------|----------|------------|
| GopherCon India 2018 | 2018-03-09-10 | Pune, India | http://www.gophercon.in/<br>CFP closed |
| GopherCon Russia 2018 | 2018-03-17 | Moscow, Russia | http://gophercon-russia.ru/en<br>CFP closed | 
| GopherCon China 2018 | 2018-04-14-15 | Shanghai, China | http://www.gopherchina.org/ |
| GothamGo 2018 | 2018-04-27 | New York, USA | http://gothamgo.com/<br>CFP https://www.papercall.io/gothamgo2018 |
| GopherCon SG 2018 | 2018-05-04 | Singapore | https://2018.gophercon.sg/<br>CFP https://www.papercall.io/gopherconsg-2018 |
| GopherCon Europe - Iceland | 2018-06-01-02 | Reykjavik, Iceland | https://gophercon.is<br>CFP https://www.papercall.io/gophercon-iceland | 
| GopherCon Denver 2018 | 2018-08-27-30 | Denver, CO | http://gophercon.com<br>CFP https://www.papercall.io/gophercon2018 |
| GopherCon Brasil 2018 | 2018-09-27-29 | Florianópolis, Brazil | https://2018.gopherconbr.org/en|
| GoLab 2018 | 2018-10-22-23 | Florence, Italy | http://golab.io<br>CFP https://www.papercall.io/golab2018|
| dotGo 2019 | 2019-03-25 | Paris, France | https://2019.dotgo.eu |

## Archives

Please keep all items in reverse chronological order (most recent first)

| Name | Date | Location | Talk, Video Archives | 
|------|------------|----------|----------------|
| Go Devroom FOSDEM 2018 | 2018-02-03-04 | Brussels, Belgium | https://fosdem.org/2018/schedule/track/go/ |
| | **2017** | | | |
| GopherCon Brasil 2017 | 2017-11-17-19 | Florianópolis, Brazil | https://2017.gopherconbr.org/en |
| dotGo | 2017-11-06 | Paris, France | https://www.dotgo.eu |
| GothamGo | 2017-10-05-06 | New York, USA | http://gothamgo.com/ |
| Golang UK | 2017-08-16-18 | London, UK | https://golanguk.com |
| GopherCon Denver | 2017-07-12-15 | Denver, CO | http://gophercon.com |
| GopherCon Singapore 2017 | 2017-05-25-26 | Singapore | http://gophercon.sg |
| Capital Go Language Conference | 2017-04-24-25 | Washington, DC | http://www.capitalgolang.com/ |
| GopherChina 2017 | 2017-04-15-16 | Shanghai | http://www.bagevent.com/event/357764 |
| GoCon Tokyo | 2017-03-25 | Tokyo, Japan |https://gocon.connpass.com/event/52441/ |
| GopherCon India 2017 | 2017-02-24-25 | Pune, India | http://www.gophercon.in/ 
| Go Devroom FOSDEM | 2017-02-05 | Brussels, Belgium | https://fosdem.org/2017/schedule/track/go/ |
| GoLab | 2017-01-20-21 | Florence, Italy | http://golab.io |
| | **2016** | | | |
| GothamGo | 2016-11-18 | New York, USA | http://gothamgo.com/ |
| GopherCon Brasil | 2016-11-04-05 | Florianópolis, Brazil | https://2016.gopherconbr.org/en/ |
| dotGo | 2016-10-10 | Paris, France | http://2016.dotgo.eu |
| Golang UK | 2016-08-18 | London, UK | http://golanguk.com |
| GopherCon Denver | 2016-07-11 | Denver, CO | http://gophercon.com |
| Gopherfest | 2016-05-16 | San Francisco, USA | http://www.gopherfest.org/ |
| GoCon Japan | 2016-04-23 | Tokyo, Japan | http://gocon.connpass.com/event/27521/ |
| Gopher China | 2016-04-16 | Beijing, China | http://www.gopherchina.org |
| GopherCon Dubai | 2016-02-23 | Dubai, UAE | http://www.gophercon.ae |
| GopherCon India | 2016-02-19 | Bengaluru, India | [videos](https://www.youtube.com/watch?v=4Dr8FXs9aJM&list=PLxFC1MYuNgJT_ynbXGuYAZbSnUnq-6VQA) |
| FOSDEM | 2016-01-30 | Brussels, Belgium | https://video.fosdem.org/2016/h1302/ |
| Gopher Gala | 2016-01-22 | Earth |  |
| | **2015** | | |
| GoLab | 2015-12-15 | Florence, Italy | http://golab.io |
| GoCon Tokyo | 2015-12-06 | Tokyo, Japan |  |
| GopherFest SV | 2015-11-18 | Facebook, Menlo Park, CA | [videos](https://www.youtube.com/playlist?list=PLtLJO5JKE5YALxdnGgvgwxTSmANOvyAo9) |
| dotGo    | 2015-11-09 | Paris, France | [videos](https://www.youtube.com/playlist?list=PLMWwKlp9xoYX4mlNDdkCOfsUG_40WCMCX) |
| GothamGo | 2015-10-02 | NY, NY | [videos](https://www.youtube.com/playlist?list=PLeGxIOPLk9ELh9tsPZMzau6CzMjfMzp9-) |
| GolangUK | 2015-08-21 | London, UK | [videos](https://www.youtube.com/playlist?list=PLDWZ5uzn69ezRJYeWxYNRMYebvf8DerHd) |
| GopherCon Denver | 2015-07-07 | Denver, CO | [keynotes](https://www.youtube.com/playlist?list=PL2ntRZ1ySWBf-_z-gHCOR2N156Nw930Hm), [lightning](https://www.youtube.com/playlist?list=PL2ntRZ1ySWBeHqlHM8DmvS8axgbrpvF9b) |
| GoCon Tokyo | 2015-06-20 | Tokyo, Japan ||
| GopherfestSF | 2015-06-25 | San Francisco, CA | [videos](https://www.youtube.com/playlist?list=PLtLJO5JKE5YB55ExLApKU0S8_eN5eaGkU) |
| GopherCon India | 2015-03-17 | Bengaluru, India | [videos](https://www.youtube.com/playlist?list=PLxFC1MYuNgJTY3uQ5Ja4F5Sz305nnrBOq) |
| Go Devroom FOSDEM | 2015-03-04 | Brussels, Belgium | [videos](https://www.youtube.com/playlist?list=PLtLJO5JKE5YDK74RZm67xfwaDgeCj7oqb) |
| Gopher China | 2015-04-25 | Shanghai, China | |
| London Go Gathering | 2015-02-03 | London, UK | [videos](https://www.youtube.com/playlist?list=PLtLJO5JKE5YCZYDAt8-uyJbVgq1FIUpVM)|
| | **2014** | | |
| GothamGo | 2014-11-15 | NYC, NY | [videos](https://vimeo.com/channels/852217) |
| dotGo | 2014-09-10 | Paris, France | [videos](https://www.youtube.com/playlist?list=PLMW8Xq7bXrG58Qk-9QSy2HRh2WVeIrs7e) |
| Go Devroom FOSDEM | 2014-06-30 |Brussels, Belgium | [videos](https://www.youtube.com/playlist?list=PLtLJO5JKE5YDKG4WcaNts3IVZqhDmmuBH) |
| GopherCon Denver | 2014-04-24 | Denver, CO | [videos](https://www.youtube.com/playlist?list=PL2ntRZ1ySWBcD_BiJiDJUcyrb2w3bTulF) |