この記事は Go3 Advent Calendar 2019 13日目の記事です qiita.com TL;DR x/sync/errgroup はいいぞ 本編 最近よく書くサーバの起動部分のコードを紹介します 分かる人には見るのが一番早いと思うので、早速コード全体を載せます やりたいことは localhost:8888 で HTTP サーバを起動 SIGINT を受けると HTTP サーバを graceful shutdown 各所での ctx.Done() のハンドリング これらを混乱しないように記述したかったのが最初のモチベーションです package main import ( "context" "fmt" "net/http" "os" "x/sync/errgroup" ) func main() { os.Exit(run(context.Background())) }