envvar.go raw
1 // Copyright 2022-2025 The sacloud/packages-go Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 package envvar
16
17 import (
18 "os"
19 "strconv"
20 "strings"
21 )
22
23 // StringFromEnv 環境変数から指定のキーの値を読み取って返す。ゼロ値だった場合はdefaultValueを返す
24 func StringFromEnv(key, defaultValue string) string {
25 v := os.Getenv(key)
26 if v == "" {
27 return defaultValue
28 }
29 return v
30 }
31
32 // StringFromEnvMulti 指定の環境変数を順番に読み取り、最初に見つかった非ゼロ値を返す。すべてゼロ値だった場合はdefaultValueを返す
33 func StringFromEnvMulti(keys []string, defaultValue string) string {
34 for _, key := range keys {
35 v := os.Getenv(key)
36 if v != "" {
37 return v
38 }
39 }
40 return defaultValue
41 }
42
43 // StringSliceFromEnv 環境変数から指定のキーの値を読み取って、スライスに変換して返す。
44 //
45 // 読み取った環境変数の値がゼロ値の場合はdefaultValueを返す。
46 // 以外の場合はカンマで区切り、半角スペースをトリムした上でスライスに格納して返す。
47 func StringSliceFromEnv(key string, defaultValue []string) []string {
48 v := os.Getenv(key)
49 if v == "" {
50 return defaultValue
51 }
52 values := strings.Split(v, ",")
53 for i := range values {
54 values[i] = strings.Trim(values[i], " ")
55 }
56 return values
57 }
58
59 // StringSliceFromEnvMulti 指定の環境変数を順番に読み取り、スライスに変換して返す。
60 //
61 // 読み取った環境変数の値がゼロ値の場合はdefaultValueを返す。
62 // 以外の場合はカンマで区切り、半角スペースをトリムした上でスライスに格納して返す。
63 func StringSliceFromEnvMulti(keys []string, defaultValue []string) []string {
64 for _, key := range keys {
65 v := os.Getenv(key)
66 if v != "" {
67 values := strings.Split(v, ",")
68 for i := range values {
69 values[i] = strings.Trim(values[i], " ")
70 }
71 return values
72 }
73 }
74 return defaultValue
75 }
76
77 // IntFromEnv 環境変数から指定のキーの値を読み取って返す。ゼロ値だった場合はdefaultValueを返す
78 func IntFromEnv(key string, defaultValue int) int {
79 v := os.Getenv(key)
80 if v == "" {
81 return defaultValue
82 }
83 i, err := strconv.ParseInt(v, 10, 64)
84 if err != nil {
85 return defaultValue
86 }
87 return int(i)
88 }
89
90 // IntFromEnvMulti 指定の環境変数を順番に読み取り、最初に見つかった非ゼロ値を返す。すべてゼロ値だった場合はdefaultValueを返す
91 func IntFromEnvMulti(keys []string, defaultValue int) int {
92 for _, key := range keys {
93 v := os.Getenv(key)
94 if v != "" {
95 i, err := strconv.ParseInt(v, 10, 64)
96 if err != nil {
97 return defaultValue
98 }
99 return int(i)
100 }
101 }
102 return defaultValue
103 }
104
105 // Int64FromEnv 環境変数から指定のキーの値を読み取って返す。ゼロ値だった場合はdefaultValueを返す
106 func Int64FromEnv(key string, defaultValue int64) int64 {
107 v := os.Getenv(key)
108 if v == "" {
109 return defaultValue
110 }
111 i, err := strconv.ParseInt(v, 10, 64)
112 if err != nil {
113 return defaultValue
114 }
115 return i
116 }
117
118 // Int64FromEnvMulti 指定の環境変数を順番に読み取り、最初に見つかった非ゼロ値を返す。すべてゼロ値だった場合はdefaultValueを返す
119 func Int64FromEnvMulti(keys []string, defaultValue int64) int64 {
120 for _, key := range keys {
121 v := os.Getenv(key)
122 if v != "" {
123 i, err := strconv.ParseInt(v, 10, 64)
124 if err != nil {
125 return defaultValue
126 }
127 return i
128 }
129 }
130 return defaultValue
131 }
132