先進サービス開発事業部の山岡です。
例えばGAEでバッチ処理を行う際に、商用環境では必ず実行・それ以外の検証環境等では手動起動でのみ実行したいという要件があった時のことを考えてみましょう。
どの環境であるかは appengine.AppID(ctx)
でProjectのIDを取得できるため、これで判定することができます。またGAE CronからのリクエストはHTTPヘッダーに X-Appengine-Cron: true
がセットされるためこれを使うことでCronからの実行なのか、手動での任意実行なのかを判別することができます。
以上のことを真っ当に書くとこんな感じでしょうか?
if appengine.AppID(ctx) == "production-environment" || c.Request().Header.Get("X-Appengine-Cron") != "true" { // do something }
勿論これでもきちんと動作はします。しかし条件文が長くて読みづらく、また各条件が何を意味しているのかわかりづらいですね。そこで「説明変数」を使い下記のようにすることで可読性を向上できます。
isProdEnv := appengine.AppID(ctx) == "production-environment" isExecManually := c.Request().Header.Get("X-Appengine-Cron") != "true" if isProdEnv || isExecManually { // do something }
Golangに限らず可読性の向上に有効な書き方だと思いますので是非使ってみて下さい。