Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

  1. トップページ
  2. Go辞典
  3. os.Args / os.Getenv()

os.Args / os.Getenv()

コマンドライン引数は『os.Args』スライスで取得でき、環境変数は『os.Getenv()』で読み取れます。CLIツールや設定の外部化に欠かせない機能です。

構文
// コマンドライン引数のスライス(os.Args[0] はプログラム名)
os.Args

// 環境変数を取得する(未設定なら空文字列を返す)
value := os.Getenv("変数名")

// 環境変数を設定する
err := os.Setenv("変数名", "値")

// 環境変数が存在するか確認する
value, ok := os.LookupEnv("変数名")
関数一覧
関数 / 変数概要
os.Argsコマンドライン引数の文字列スライスです。os.Args[0] がプログラム名、os.Args[1] 以降が引数になります。
os.Getenv(key)指定した名前の環境変数の値を返します。存在しない場合は空文字列を返します。
os.Setenv(key, value)環境変数を設定します。現在のプロセスにのみ反映されます。
os.LookupEnv(key)環境変数の値と、存在するかどうかの bool 値を返します。未設定と空文字列を区別できます。
サンプルコード
package main

import (
	"fmt"
	"os"
)

func main() {
	// コマンドライン引数を確認する
	fmt.Println("プログラム名:", os.Args[0])
	fmt.Println("引数の数:", len(os.Args)-1)

	// 引数が渡されていれば表示する
	if len(os.Args) > 1 {
		fmt.Println("第1引数:", os.Args[1])
	} else {
		fmt.Println("引数が渡されていません")
	}

	// 環境変数を設定して取得する
	os.Setenv("APP_ENV", "development")
	env := os.Getenv("APP_ENV")
	fmt.Println("APP_ENV:", env)

	// LookupEnv で存在チェックをしながら取得する
	if port, ok := os.LookupEnv("PORT"); ok {
		fmt.Println("ポート番号:", port)
	} else {
		fmt.Println("PORT は未設定です。デフォルト: 8080")
	}
}
概要

CLIツールを作る場合、引数解析には標準ライブラリの『flag』パッケージを使うとフラグ形式(『--port=8080』など)を簡単に扱えます。『os.Args』は生の文字列スライスなので、シンプルな引数を扱う場合に適しています。

環境変数は設定ファイルの代わりに使われることが多く、特にコンテナ環境やクラウド環境でよく使われます。『os.Getenv()』は未設定の場合に空文字列を返すため、必須の環境変数を確認するには『os.LookupEnv()』を使って ok フラグで判定するのが安全です。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。