はじめに
GoでOpenWeatherMapAPI叩いてみたでやったものをちょっとだけ改良して、エラー時のログ処理を追加してみたものになります。
環境
OS:maOS Catalina 10.15.5
Go:go version go1.14.4 darwin/amd64
手順
- logrusをインストールする
※ログレベルを分けたい&速度を気にする必要がない&シンプルに使えそうだったのでlogrusを選択
$ go get github.com/sirupsen/logrus
- init関数でログ設定を行う
func init() {
// Info以上のレベルを出力する設定
log.SetLevel(log.InfoLevel)
}
-
エラーだった場合にログを出力する
- APIを叩いたとき
res, resErr := http.Get(url) if resErr != nil { log.Fatalf("Failed to Get API: %v", resErr) }
- レスポンスを取得したとき
// レスポンスを取得 defer res.Body.Close() body, redErr := ioutil.ReadAll(res.Body) // レスポンスを読み込めなかった場合はログを出力 if redErr != nil { log.Warnf("Failed to read response: %v", redErr) }
- JSONをパースしたとき
// 返却されたJSONをパース if paErr := json.Unmarshal(body, &data); paErr != nil { log.Warnf("Failed to parse JSON: %v", paErr) }
課題
- ちゃんとテスト書くとどうやってやるんだろう・・・?
- 全部mainに書いちゃってるので、リファクタリングが必要
- API叩いたときにエラーだったらリトライ処理あってもよい
- Goの例外処理の思想がJavaとだいぶ異なるのでそのあたり整理しておさえたい