Как читать переменные env в Golang с помощью viper

Использование переменных Env является одним из способов защиты секретов вашего приложения и широко используется почти во всех приложениях.

Вы должны знать о таких производственных практиках, чтобы обезопасить свое приложение!

В этом блоге мы будем читать переменные окружения (надежно хранить наши секретные ключи) с помощью пакета viper из GO.

Я постарался сделать этот пост простым, но информативным, так что давайте сразу перейдем к делу!

Настройка проекта

Здесь мы создадим структуру проекта для этого учебника.

Я советую вам просмотреть этот раздел, даже если у вас уже есть готовый проект. Это поможет вам лучше понять данный учебник.

1. Начните новый проект GO

Перейдите в рабочее пространство go

cd $GOPATH
Войдите в полноэкранный режим Выйти из полноэкранного режима

Создайте проект и перейдите в проект

mkdir read-env-var
cd read-env-var
Войти в полноэкранный режим Выйти из полноэкранного режима

2. Инициализируйте проект

go mod init github.com/YOUR_USERNAME/read-env-var
Войти в полноэкранный режим Выйти из полноэкранного режима

3. Создадим структуру проекта

mkdir -p cmd pkg/common/envs pkg/common/config
Войти в полноэкранный режим Выйти из полноэкранного режима

4. Создание файлов

touch Makefile cmd/main.go pkg/common/envs/.env pkg/common/config/config.go
Войти в полноэкранный режим Выйти из полноэкранного режима

Наконец, структура вашего проекта должна выглядеть следующим образом,

Переменные окружения

Во-первых, нам нужно добавить некоторые переменные окружения, в которых мы будем хранить порт приложения и другие секреты.

Давайте добавим код в pkg/common/envs/.env

PORT=:3000
DB_URL=postgres://DB_USER:DB_PASSWORD@DB_HOST:DB_PORT/go_api_medium
API_KEY=<YOUR_API_KEY_HERE>
Войти в полноэкранный режим Выйти из полноэкранного режима

Установите viper

Viper — это пакет, который мы будем использовать для чтения переменной env и использования ее в нашем проекте.

go get github.com/spf13/viper
Войти в полноэкранный режим Выйти из полноэкранного режима

Конфигурация Viper

Давайте добавим код в pkg/common/config/config.go

package config

import "github.com/spf13/viper"

type Config struct {
    Port  string `mapstructure:"PORT"`
    DBUrl string `mapstructure:"DB_URL"`
}

func LoadConfig() (c Config, err error) {
    viper.AddConfigPath("./pkg/common/config/envs")
    viper.SetConfigName("dev")
    viper.SetConfigType("env")

    viper.AutomaticEnv()

    err = viper.ReadInConfig()

    if err != nil {
        return
    }

    err = viper.Unmarshal(&c)

    return
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Главный файл

Мы инициализируем viper для работы с нашими переменными env

Добавим код в cmd/main.go

package main

import (
    "fmt"
    "github.com/spf13/viper"
)

func main() {
    viper.SetConfigFile("./pkg/common/envs/.env")
    viper.ReadInConfig()

    // add env variables as needed
    port := viper.Get("PORT").(string)
    dbUrl := viper.Get("DB_URL").(string)

    fmt.Println(port, dbUrl)
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Запустить код

Добавим наш скрипт в MakeFile

server:
     go run cmd/main.go
Войти в полноэкранный режим Выйти из полноэкранного режима

и затем, запустите скрипт make server в терминале

(или)

Прямой запуск команды в терминале

go run cmd/main.go
Войти в полноэкранный режим Выйти из полноэкранного режима

Выход:

Вот и все, друзья. Подводя итог, мы

  1. Создали проект Go
  2. Добавили переменные окружения
  3. Установили пакет viper
  4. Добавили конфигурацию viper
  5. Инициализировали viper в файле main.go

В следующем уроке мы расширим этот проект, чтобы добавить CRUD API с помощью фреймворка Gin. Обязательно следите за этим уроком и ставьте лайк. Спасибо, что вы здесь!

Пожалуйста, поделитесь им со своими друзьями и коллегами.

Оцените статью
Procodings.ru
Добавить комментарий