Git Product home page Git Product logo

golang-viper's Introduction

Learning Config Management On Golang Using VIPER

Golang Viper

  • Viper adalah salah satu Library untuk Golang yang populer digunakan untuk manajemen konfigurasi.
  • Viper mendukung banyak jenis file konfigurasi, seperti JSON, YAML, env file, properties, dan lainnya.

Membuat Project

Sebelum belajar Viper, pertama buat project terlebih dahulu. Buat sebuah folder baru misalnya GOLANG-VIPER, kemudian masuk ke direktori folder tersebut lalu lakukan inisiasi project golang dengan mengetikkan.

go mod init golang-viper

Menambahkan Library Viper

Untuk menambahkan library/modul ke dalam project kita, caranya masuk ke terminal dari dalam direktori project kita. Kemudian ketikkan:

go get github.com/spf13/viper

karena nanti kita belajarnya sambil menggunakan unit test, maka kita tambahkan juga library testify untuk unit testnya.

go get github.com/stretchr/testify

Membuat Viper

Untuk membuat Viper, caranya cukup mudah yaitu kita bisa menggunakan function viper.New() . Setelah membuat Viper, kita bisa menentukan dari mana kita akan mengambil konfigurasi.

Mulai Koding

Masuk kembali ke dalam project, kemudian tambahkan sebuah file dengan nama viper_test.go. Buka file tersebut dengan text editor atau IDE favorit teman-teman.

package golangviper

import (
        "testing"

        "github.com/spf13/viper"
        "github.com/stretchr/testify/assert"
)

func TestViper(t *testing.T) {
    var config *viper.Viper = viper.New()
    assert.NotNil(t, config)
}

Ok kita berhasil membuat objek viper.

JSON

Sekarang kita akan belajar, membaca konfigurasi dari file JSON. buat sebuah file baru dengan nama config.json.

  • file config.json
{
  "app": {
    "name": "Belajar Golang Viper",
    "version": "1.0.0",
    "author": "Mazufik"
  },
  "database": {
    "show_sql": true,
    "host": "localhost",
    "port": 3306
  }
}
  • file viper_test.go
package golangviper

import (
        "testing"

        "github.com/spf13/viper"
        "github.com/stretchr/testify/assert"
)

func TestJSON(t *testing.T) {
    config := viper.New()
    config.SetConfigName("config")
    config.SetConfigType("json")
    config.AddConfigPath(".")

    // read config
    err := config.ReadInConfig()
    assert.Nil(t, err)

    assert.Equal(t, "Belajar Golang Viper", config.GetString("app.name"))
    assert.Equal(t, "Mazufik", config.GetString("app.author"))
    assert.Equal(t, "localhost", config.GetString("database.host"))
    assert.Equal(t, 3306, config.GetInt("database.port"))
    assert.Equal(t, true, config.GetBool("database.show_sql"))
}

YAML

Untuk mmebaca konfigurasi dari file YAML, itu sama degan membaca konfigurasi diJSON cuman beda format filenya saja. BUat file dengan nama config.yaml

  • file config.yaml
app:
  name: "Belajar Golang Viper"
  author: "Mazufik"
  version: "1.0.0"
database:
  host: "localhost"
  port: 3306
  show_sql: true
  • file viper_test.go
func TestYAML(t *testing.T) {
 config := viper.New()
 // config.SetConfigName("config")
 // config.SetConfigType("json") atau
 config.SetConfigFile("config.yaml")
 config.AddConfigPath(".")

 // read config
 err := config.ReadInConfig()
 assert.Nil(t, err)

 assert.Equal(t, "Belajar Golang Viper", config.GetString("app.name"))
 assert.Equal(t, "Mazufik", config.GetString("app.author"))
 assert.Equal(t, "localhost", config.GetString("database.host"))
 assert.Equal(t, 3306, config.GetInt("database.port"))
 assert.Equal(t, true, config.GetBool("database.show_sql"))
}

ENV File

Viper juga bisa digunakan untuk membaca file dengan format ENV. Buat file dengan nama config.env

  • file config.env
APP_NAME=Belajar Golang Viper
APP_AUTHRO=Mazufik
APP_VERSION=1.0.0

DATABASE_HOST=localhost
DATABASE_PORT=3306
DATABASE_SHOW_SQL=true
  • file viper_test.go
func TestENV(t *testing.T) {
    config := viper.New()
    config.SetConfigFile("config.env")
    config.AddConfigPath(".")

    // read config
    err := config.ReadInConfig()
    assert.Nil(t, err)

    assert.Equal(t, "Belajar Golang Viper", config.GetString("APP_NAME"))
    assert.Equal(t, "Mazufik", config.GetString("APP_AUTHOR"))
    assert.Equal(t, "localhost", config.GetString("DATABASE_HOST"))
    assert.Equal(t, 3306, config.GetInt("DATABASE_PORT"))
    assert.Equal(t, true, config.GetBool("DATABASE_SHOW_SQL"))
}

golang-viper's People

Contributors

mazufik avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.