os
и сторонним пакетом caarlos0/env
;localhost:8080
) через переменную окружения.USER
. Чтобы получить её значение, запустите в консоли echo $USER
. Список всех переменных окружения можно вывести командой env
.USERNAME
. В отличие от Linux, на Windows имя переменной можно указывать в любом регистре. Поэтому echo %USERNAME%
и echo %UserName%
выведут одно и то же значение. Чтобы увидеть все переменные окружения, используйте команду set
.USER
. Для получения значения переменной примените echo $USER
. Команда printenv
выводит список всех переменных окружения.USER
в примере на Go. Получить значение переменной можно функцией os.Getenv(key string) string
:package main
import (
"fmt"
"os"
)
func main() {
u := os.Getenv("USER")
fmt.Println(u)
}
USER
нет, функция GetEnv()
вернёт пустую строку. Чтобы уточнить, отсутствует переменная или существует с пустым значением, используйте функцию os.LookupEnv(key string) (string, bool)
.Environ() []string
:package main
import (
"fmt"
"os"
)
func main() {
envList := os.Environ()
// выводим первые пять элементов
for i := 0; i < 5 && i < len(envList); i++ {
fmt.Println(envList[i])
}
}
имя=значение
. Вывод может выглядеть так:SHELL=/bin/bash
SESSION_MANAGER=local/ak-desktop:@/tmp/.ICE-unix/1265,unix/ak-desktop:/tmp/.ICE-unix/1265
QT_ACCESSIBILITY=1
COLORTERM=truecolor
XDG_CONFIG_DIRS=/etc/xdg/xdg-cinnamon:/etc/xdg
github.com/caarlos0/env
.string
, int
, bool
, float32
и т. д.);time.Duration
, url.URL
);encoding.TextUnmarshaler
;caarlos0/env
позволяет проверить, существует ли переменная окружения и соответствует ли её значение определённому типу данных.env:"NAME"
от структуры, которую нужно заполнить значениями из окружения.FILES
и разделённых двоеточием;HOME
;TASK_DURATION
(если эта переменная отсутствует, завершим программу с ошибкой).package main
import (
"github.com/caarlos0/env/v6"
"log"
"time"
)
type Config struct {
Files []string `env:"FILES" envSeparator:":"`
Home string `env:"HOME"`
// required требует, чтобы переменная TASK_DURATION была определена
TaskDuration time.Duration `env:"TASK_DURATION,required"`
}
func main() {
var cfg Config
err := env.Parse(&cfg)
if err != nil {
log.Fatal(err)
}
log.Println(cfg)
}
env: required environment variable "TASK_DURATION" is not set
. Задайте на своём компьютере переменные окружения FILES
и TASK_DURATION
.SET
:SET FILES=test1.txt:test2.txt
SET TASK_DURATION=5s
export
:export FILES=test1.txt:test2.txt
export TASK_DURATION=5s
cmd/skill/flags.go
:package main
import (
"flag"
"os"
)
var flagRunAddr string
func parseFlags() {
flag.StringVar(&flagRunAddr, "a", ":8080", "address and port to run server")
flag.Parse()
// для случаев, когда в переменной окружения RUN_ADDR присутствует непустое значение,
// переопределим адрес запуска сервера,
// даже если он был передан через аргумент командной строки
if envRunAddr := os.Getenv("RUN_ADDR"); envRunAddr != "" {
flagRunAddr = envRunAddr
}
}
$ go build -o skill
$ RUN_ADDR=:8081 ./skill
Running server on :8081
$ RUN_ADDR=:8082 ./skill -a :8081
Running server on :8082
os
.caarlos0/env
.kelseyhightower/envconfig
.