# The New Go Developer Network
14 Mar 2019
Tags: Community
Summary: Announcing the Go Developer Network, a collection of Go user groups sharing best practices.

GoBridge Leadership Team

##

A sense of community flourishes when we come together in person. As handles become names
and avatars become faces, the smiles are real and true friendship can grow. There is joy
in the sharing of knowledge and celebrating the accomplishments of our friends, colleagues,
and neighbors. In our rapidly growing Go community this critical role is played by the
Go user groups.

To better support our Go user groups worldwide, the Go community leaders at [GoBridge](https://gobridge.org)
and Google have joined forces to create a new program called the Go Developer Network
(GDN). The GDN is a collection of Go user groups working together with a shared mission
to empower developer communities with the knowledge, experience, and wisdom to build
the next generation of software in Go.

We have partnered with Meetup to create our own [Pro Network of Go Developers](https://meetup.com/pro/go)
providing Go developers a single place to search for local user groups, events, and
see what other Gophers are doing around the world.

User groups that join the GDN will be recognized by GoBridge as the official user group
for that city and be provided with the latest news, information, conduct policies, and
procedures. GDN groups will have Meetup fees paid by the GDN and will have access to
special swag and other fun items. Each organizer of a GDN local group will continue to
own the group and maintain full admin rights. **If you currently run a user group**,
please fill out this [application](https://j.mp/gdn-form) to request to join the GDN.

We hope you are as excited about the GDN as we are.
