1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Go】環境変数をStructから読み込む

Last updated at Posted at 2022-10-15

はじめまして。haru_0_4です。
Goを勉強し始めて早くも半年が経過しました。
今回はGoで勉強する中で、環境変数を扱う際に便利なパッケージcaarlos0/envを見つけたので、紹介したいと思います。

環境変数の扱い方

DB周りの認証情報の設定は環境変数に持たせることが一般的かと思います。
私もGoで環境変数を扱うとき、標準バッケージosを使って次のような使い方をしていました。

func main() {
    port := os.Getenv("PORT")
    fmt.Println(pass)
}

ここで、環境変数がないときはどうするのかというと、このようにデフォルト値を設定する処理を書きます。

port := os.Getenv("PORT")
if port == "" {
    port = "8080"
}

しかし、この処理を環境変数の数だけ書くのは効率的とは言えません。

caarlos0/envを使う

そこで、caarlos0/envが登場します。
使い方は簡単で、扱いたい環境変数をstructに定義し、envタグでデフォルト値を設定するだけで設定は完了です。

package main

import (
    "fmt"

    "github.com/caarlos0/env"
)

type Config struct {
    Home         string   `env:"HOME"`
    Port         int      `env:"PORT" envDefault:"3000"` // デフォルト値の設定
    IsProduction bool     `env:"PRODUCTION"`
    Hosts        []string `env:"HOSTS" envSeparator:":"` // 配列も読める
    SecretKey    string   `env:"SECRET_KEY,required"` // 必須設定も可
    Notag        string   // タグ無しにすれば環境変数のない設定も同居できる
}

func main() {
    cfg := Config{}
    env.Parse(&cfg) // パースすると環境変数から値が読み出される
    fmt.Println(cfg)
}

とてもスマートでわかりやすいコードになったと思います。
これで長ったらしい環境変数の処理を書く必要がなくなります。
他にも環境変数を扱うためにkelseyhightower/envconfig など同様にstructを使った方法もあるみたいなので、状況に応じて使い分けていきたいと思います。

まとめ

DBの秘匿情報やポート番号などをGoで環境変数として設定する際に、便利なパッケージを紹介しました。
少しでも参考になれば幸いです。

参考記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?