# Go, the Go Community, and the Pandemic
25 Mar 2020
Summary: How the Go team is approaching the pandemic, what you can expect from us, and what you can do.

Carmen Andoh

Russ Cox

Steve Francia

##

Go always comes second to more
basic concerns like personal and family health and safety.
Around the world, the past couple months have been terrible,
and we are still at the start of this awful pandemic.
There are days when it seems like working on
anything related to Go should be considered a serious priority inversion.

But after we’ve done all we can
to prepare ourselves and our families for whatever is coming,
getting back to some approximation of a familiar routine
and normal work is a helpful coping mechanism.
In that spirit, we intend to keep working on Go
and trying to help the Go community as much as we can.

In this post we want to share a few important notes about
how the pandemic is affecting the Go community,
a few things we’re doing to help, what you can do to help,
and our plans for Go itself.

## Conferences and Meetups

The Go community thrives on in-person conferences and meetups.
We had anticipated 35 conferences this year
and thousands of meetups, nearly all of which have
now changed, been postponed, or been cancelled.
We’ll keep the
[conferences wiki page](https://github.com/golang/go/wiki/Conferences)
updated as plans change.

We want to do everything we can to help support impacted Go conferences.
We also want to support efforts to explore
new ways for gophers to connect in the time of social distancing.
In addition to honoring Google’s existing sponsorships,
we are interested to offer support to people planning
virtual conference alternatives through the rest of the year.
If you are organizing a Go conference and have been impacted,
or if you are considering holding a virtual alternative,
please reach out to Carmen Andoh at _candoh@google.com_.

For conference organizers,
the [Gophers slack](https://gophers.slack.com)
[#conf-organizers](https://app.slack.com/client/T029RQSE6/C97B0NCVD) channel
is a place to discuss contingency plans,
best practices, cancellation, and postponement support.
It’s also a place to share idea for virtual events,
to continue to connect and support the Go community.

For meetup organizers,
the [Go Developer Network](https://www.meetup.com/pro/go)
can provide Zoom for Education licensing to meetups
that want to start holding virtual meetings.
If you host a meetup, or you’d like to, we encourage you
to use this opportunity to get speakers from outside your
region to present to your group.
For more information, and to get involved,
please join
the [Gophers slack](https://gophers.slack.com)
[#remotemeetup](https://app.slack.com/client/T029RQSE6/C152YB9UZ) channel.

## Online Training

The Go trainers you meet at conferences also travel the globe doing
[in-person training](https://learn.go.dev/)
for companies that want help adopting Go.
That in-person teaching is crucial to bringing
new gophers into the community;
we’re incredibly grateful to the trainers for the work they do.
Unfortunately, on-site training contracts have all been cancelled
for the next few months, and the trainers in our community
have lost their primary (or sole) source of income.
We encourage companies to consider virtual training
and workshops during this difficult time.
Most trainers are being flexible with pricing,
scheduling, and class structure.

## Job Postings

We know that the current downturn means that some
gophers are looking for new jobs.
The Go community has built a number of Go-specific job-posting sites, including
[Golang Cafe](https://golang.cafe/),
[Golang Projects](https://www.golangprojects.com/),
and
[We Love Go](https://www.welovegolang.com).
The [Gophers slack](https://gophers.slack.com)
also has many job-hunting channels: search for “job” in the channel list.
We encourage employers with any new openings to post in as
many appropriate places as possible.

## FOSS Responders

We are proud that Go is part of the broader open-source ecosystem.
[FOSS Responders](https://fossresponders.com)
is one effort to help the open-source ecosystem
deal with the impacts of the pandemic.
If you want to do something to help affected open-source communities,
they are coordinating efforts and also have links to other efforts.
And if you know of other open-source communities that need help,
let them know about FOSS Responders.

## COVID-19 Open-Source Help Desk

The [COVID-19 Open-Source Help Desk](https://covid-oss-help.org/)
aims to help virologists, epidemiologists, and other domain experts
find quick answers to any problems they are having with
open-source scientific computing software,
from experts in that software,
so they can focus their time on what they know best.
If you are a developer or a scientific computing expert
willing to help by answering the posts of the domain experts,
visit the site to learn how to help.

## U.S. Digital Response

For our gophers in the United States,
the [U.S. Digital Response](https://www.usdigitalresponse.org/)
is working to connect qualified volunteers to
state and local governments that need digital help
during this crisis.
Quoting the web page,
“If you have relevant experience
(healthcare, data, engineering & product development,
general management, operations, supply chain/procurement and more),
can work autonomously through ambiguity,
and are ready to jump into a high-intensity environment,”
see the site for how to volunteer.

## Plans for Go

Here on the Go team at Google, we recognize that the
world around us is changing rapidly
and that plans beyond the next couple weeks
are not much more than hopeful guesses.
That said, right now we are working
on what we think are the most important projects for 2020.
Like all of you, we’re at reduced capacity, so the work
continues slower than planned.

Our analysis of the Go 2019 user survey is almost complete,
and we hope to post it soon.

At least for now, we intend to keep to our timeline for Go 1.15,
with the understanding that it will probably have fewer new features
and improvements than we originally planned.
We continue to do code reviews, issue triage,
and [proposal review](https://golang.org/s/proposal-minutes).

[Gopls](https://go.googlesource.com/tools/+/refs/heads/master/gopls/README.md)
is the language-aware backend supporting most Go editors today,
and we continue to work toward its 1.0 release.

The new Go package and module site [pkg.go.dev](https://pkg.go.dev)
keeps getting better.
We’ve been working on usability improvements
and new features to better help users find and evaluate Go packages.
We’ve also expanded the set of recognized licenses and improved the
license detector, with more improvements to come.

Our [Gopher values](https://golang.org/conduct#values)
are what ground us, now more than ever.
We are working extra hard to be friendly, welcoming,
patient, thoughtful, respectful, and charitable.
We hope everyone in the Go community will try to do the same.

We’ll continue to use this blog to let you know about
important news for the Go ecosystem.
In those moments when you’ve taken care of the much more
important things going on in your life,
we hope you’ll check in and see what we’ve been up to.

Thank you, as always, for using Go and being part of the Go community.
We wish you all the best in these difficult times.
