Golang : Config Management Using Viper

Okky Muhamad Budiman
2 min readOct 1, 2020

https://github.com/spf13/viper

Apa itu Viper ?

Viper merupakan config management tools yang mencakup 12-factor Apps. Merupakan sebuah package yang dapat menghandle beberapa format configuration, yaitu :

  • setting defaults
  • reading from JSON, TOML, YAML, HCL, envfile and Java properties config files
  • live watching and re-reading of config files (optional)
  • reading from environment variables
  • reading from remote config systems (etcd or Consul), and watching changes
  • reading from command line flags
  • reading from buffer
  • setting explicit values

Mengapa Saya merekomendasikan Viper ?

Karena dengan support beberapa extension file serta cara implementasi yang mudah, menjadikan viper lebih reliable dan mudah diimplementasikan.

Untuk membaca dokumentasi viper bisa di https://github.com/spf13/viper

Penerapan dalam Golang

  1. Install viper package
go get github.com/spf13/viper

2. Siapkan file env untuk menyimpan config aplikasi kita, disini saya memakai .env.yml

server:  
port: 8080
mqServer:
dial: "amqp://guest:guest@localhost:5672/"

pada .env.yml saya menambahkan 2 config yaitu server dan mqServer, dimana server berisi port yang nantinya untuk configurasi running server di port berapa, sedangkan mqServer digunakan untuk konfigurasi rabbitMQ. Disini kalian bisa menambahkan konfigurasi yang lain seperti database atau redis config.

3. Siapkan folder config dalam golang project anda, Di dalam folder tersebut saya menyiapkan 3 file yaitu configuration.go sebagai object dari config kita, server.go sbg object configurasi server kita dan mq.go sbg object dari config rabbitMQ.

  • configuration.go
package config

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

type Configuration struct {
Server ServerConfiguration
MQServer MQConfiguration
}

func InitConfig() Configuration {
viper.SetConfigName(".env")
viper.AddConfigPath(".")

var configuration Configuration

if err := viper.ReadInConfig(); err != nil {
log.Fatalf("Error reading config file, %s", err)
}
err := viper.Unmarshal(&configuration)
if err != nil {
log.Fatalf("unable to decode into struct, %v", err)
}

return configuration
}

Dalam code diatas pertama kita set config name disni saya set .env kemudian path dari file tersebut. Selanjutnya kita akan membaca semua config yang ada di file .env.yml dan jika berhasil kita akan mapping kedalam sebuah struct bernama configuration.

  • server.go
package config

type ServerConfiguration struct {
Port int
}
  • mq.go
package config

type MQConfiguration struct {
Dial string
}

4. Setelah selesai menyiapkan semua konfigurasi, saatnya untuk inisialisasi konfigurasi kita pada package main, caranya sebagai berikut.

package main

import (
configs "go-rabbitmq/config"
)

func main() {
// initial config
config := configs.InitConfig()
// will return amqp://guest:guest@localhost:5672/
fmt.Println(config.MQServer.Dial)
// will return 8080
fmt.Println(config.Server.Port)
}

Nah selesai sudah membuat config management dengan viper di bahasa pemograman golang, dengan hanya memanggil InitConfig() kita sudah menginisalisasi semua config yang ada di file .env.yml .

Semoga dengan pembahasan ini bisa membantu untuk semua developer yang sedang memulai belajar Golang.

Referensi :

Sign up to discover human stories that deepen your understanding of the world.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Okky Muhamad Budiman
Okky Muhamad Budiman

Written by Okky Muhamad Budiman

Tech Enthusiast, Punk Rock Software Engineer, Hustler Harder

No responses yet

Write a response

Recommended from Medium

Lists

See more recommendations