Help us understand the problem. What is going on with this article?

Go言語のアプリケーション設定・環境変数をStructにまとめる

Go言語で環境変数を読み出す

Go言語では標準パッケージから簡単に環境変数を読み出すことができます。

fmt.Println(os.Getenv("HOME"))

しかし、往々にして環境変数がないときのデフォルトを設定する事があります。
その場合はこのように書きますが、これを環境変数分用意するのはなかなか骨が折れます。

home := os.Getenv("HOME")
if home == "" {
  home = "/home/default/place"
}
fmt.Println(home)

caarlos0/envを使ってStructに読み出す

そこで活躍するのが env というライブラリです。
環境変数から読み出したい情報はStructにまとめておき、tagに情報を付与することで
デフォルト値の設定や必須設定等を行えます。

また、読み出し先のStructを定義しているだけなので、
定義するStructに他のアプリケーション設定を足したり、
メソッドを生やしたりすることも勿論できます。

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)
}

多分実用する段階であればmainパッケージに置くことはないと思うので、
configパッケージにシングルトンでConfigオブジェクトを保有しておくなり、
ロード関数を作って毎回読み出すなり色々工夫してみて下さい。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした