by Abu Zubayr

Dimanakah Sebaiknya Menyimpan Konfigurasi di Golang?

Dimanakah Sebaiknya Menyimpan Konfigurasi di Golang?
Bismillah

Setiap aplikasi yang kita buat tentu membutuhkan settingan konfigurasi. Konfigurasi tersebut pun bermacam-macam, bisa berupa konfigurasi database, email, url aplikasi dan lain-lain. Nah, lantas bagaimanakah sebaiknya settingan tersebut dilakukan? Apakah settingan tersebut langsung ditulis di dalam source code project anda? Tentu saja tidak jawabannya. Menulis langsung konfigurasi di dalam source code aplikasi anda akan membuat proses maintenance menjadi sangat sulit dilakukan. Bayangkan saja misalnya didalam source code anda terdapat konfigurasi yang berbeda-beda file-nya, satu ada di direktori ini dan yang lainnya tersebar di berbagai direktori lainnya. Dan ketika terjadi perubahan dengan konfigurasi itu, anda harus membongkar source code tersebut dan mencarinya satu persatu. Bayangkan pula model penulisan konfigurasi seperti ini anda buat bukan hanya satu project saja, tapi juga di project lainnya anda lakukan hal yang sama. Waah, pasti pusing tujuh keliling anda dibuatnya, hal seperti ini membutuhkan waktu yang lama dan melelahkan. Lalu apa solusinya? kita bahas lebih lanjut.

Umumnya konfigurasi sebuah aplikasi ditulis didalam file tersendiri, baik berupa file dengan eksistensi .env (environment), .properties, .json atau bentuk-bentuk lainnya. Yang jelas, file konfigurasi tersebut berada diluar source code aplikasi itu sendiri. Didalam postingan ini saya akan memberikan contoh bagaimana cara membuat file konfigurasi tersebut. Saya hanya mencontohkan cara membuat file konfigurasi tersebut menggunakan bahasa Go atau Golang. Untuk bahasa lainnya anda bisa mencari dari referensi lain, secara penerapan sama insyaAllah.

Ada beberapa library atau modul yang bisa anda gunakan di golang untuk menulis file konfigurasi diantaranya adalah modul godotenv atau juga bisa menggunakan vifer. Di tutorial ini saya mencontohkan file konfigurasi tersebut ditulis di file main.go, untuk project real, biasanya konfigurasi tersebut di buat di file khusus misalnya di config atau yang lainnya.
Baiklah langsung saja kita coba mempraktekkan bagaimana cara menggunakan modul tersebut satu persatu.

  1. GODOTENV
  2. Penggunaan library ini biasanya digunakan dengan eksistensi file .env. Untuk membuat konfigurasi menggunakan library ini, langkah-langkahnya adalah sebagai berikut :
    • Di project direktori anda, buka terminal/command line kemudian masukkan perintah :
    • go get github.com/joho/godotenv
    • Setelah selesai, buat sebuah file dengan eksistensi .env
    • Didalam file tersebut, tulis isi konfigurasi anda dengan format key-value, misalnya : APP-NAME=Belajar Konfigurasi Golang dimana APP-NAME adalah key, sedangkan Belajar Konfigurasi Golang merupakan value.
    • Selanjutnya buka file main.go jika sudah ada, atau jika belum buat file baru dengan nama main.go, kemudian masukkan source code seperti dibawah ini :
    • err := godotenv.Load(".env")
      if err != nil {
          panic("Cannot load .env file")
      }
      fmt.Println("Membuka konfigurasi menggunakan file .env")
      fmt.Println("==========================================")
      fmt.Println(os.Getenv("APP-NAME"))
      fmt.Println(os.Getenv("APP-GITHUB-PROJECT"))
      fmt.Println(os.Getenv("OWNER"))

      Penjelasan :
      • godotenv.Load(“.env”), artinya kita akan memuat atau membuka file .env tersebut, yang perlu diperhatikan adalah dimana anda menyimpan file .env tersebut, pastikan path dari file tersebut sudah benar karena jika path-nya salah maka akan terjadi error.
      • os.Getenv(“”), pada fungsi inilah kita menentukan key mana yang akan dipanggil.
  3. VIPER
  4. Viper sendiri lebih luas penggunaannya tidak berpatokan hanya satu jenis tipe file konfigurasi saja. Dengan viper anda bisa menulis konfigurasi dalam format JSON, TOML, YAML, HCL, INI, env, atau properties yang biasa di pakai di bahasa Java. Pada contoh ini kita akan mencoba menggunakan format JSON dan YAML. Adapun langkah-langkah untuk membuat konfigurasi menggunakan Viper adalah sebagai berikut :
    • Di project direktori anda, buka terminal/command line kemudian masukkan perintah :
    • go get github.com/spf13/viper
    • Kemudian, buat sebuah file dengan nama config.json
    • Tulis isi konfigurasi anda didalam file tersebut seperti menulis json pada umumnya, sebagai contoh seperti dibawah ini :
    • {
          "app_name":"Belajar Konfigurasi Golang",
          "app_github_project":"https://github.com/sardiabuzubayr",
          "owner":"Abu Zubayr",
          "port":3306
      }
    • Selanjutnya buka file main.go jika sudah ada, atau jika belum buat file baru dengan nama main.go, kemudian masukkan source code seperti dibawah ini :
    • viper.SetConfigName("config")
      viper.SetConfigType("json")
      viper.AddConfigPath(".")
      err = viper.ReadInConfig()
      if err != nil {
          panic("Cannot load configuration file")
      }
      fmt.Println("Membuka konfigurasi menggunakan file json (tanpa menentukan tipe data dari konfigurasi)")
      fmt.Println(viper.Get("app_name"))
      fmt.Println(viper.Get("app_github_project"))
      fmt.Println(viper.Get("owner"))
      fmt.Println(viper.Get("port"))
      
      fmt.Println("Membuka konfigurasi menggunakan file json (dengan menentukan tipe data dari konfigurasi)")
      fmt.Println(viper.GetString("app_name"))
      fmt.Println(viper.GetString("app_github_project"))
      fmt.Println(viper.GetString("owner"))
      fmt.Println(viper.GetInt("port"))

      Penjelasan :
      • viper.SetConfigName("config"), pada baris kode ini kita menentukan apa nama file konfigurasi yang akan dibaca oleh viper.
      • viper.SetConfigType("json"), bagian ini kita menentukan apa jenis file config yang kita gunakan.
      • viper.AddConfigPath("."), bagian ini menentukan dimana posisi file konfigurasi tersebut di tempatkan.
      • viper.ReadInConfig(), baris kode ini digunakan untuk memuat file konfigurasi tersebut, jika sudah benar nama, jenis, dan dimana file tersebut disimpan maka tidak akan terjadi error dibagian ini.
      • viper.Get(""), pada fungsi inilah kita tentukan key mana yang akan dipanggil. Fungsi ini bersifat global artinya seluruh data baik yang bertipe string atau angka bisa dipanggil dengan fungsi yang sama. Atau bisa juga dengan menggunakan fungsi yang lebih spesifik misalnya GetString untuk mengambil key yang datanya adalah karakter, atau GetInt untuk data yang bertipe integer, atau masih banyak lagi tipe yang disediakan oleh viper.

      Diatas adalah contoh tipe konfigurasi dengan file json. Untuk membuat dan membaca konfigurasi dengan file yaml, caranya sama, hanya saja format file konfigurasi ditulis mengikuti format yaml. Sebagai contoh adalah sebagai berikut :
      app_name: Belajar Konfigurasi Golang
      app_github_project: https://github.com/sardiabuzubayr
      owner: Abu Zubayr
      port: 3306

      Kemudian dibagian kode SetConfigType, masukkan “yaml” sehingga menjadi seperti viper.SetConfigType("yaml").
Source code keseluruhan terlihat seperti dibawah ini :
package main

import (
	"fmt"
	"os"

	"github.com/joho/godotenv"
	"github.com/spf13/viper"
)

func main() {
	err := godotenv.Load(".env")
	if err != nil {
		panic("Cannot load .env file")
	}
	fmt.Println("Membuka konfigurasi menggunakan file .env")
	fmt.Println("==========================================")
	fmt.Println(os.Getenv("APP-NAME"))
	fmt.Println(os.Getenv("APP-GITHUB-PROJECT"))
	fmt.Println(os.Getenv("OWNER"))

	viper.SetConfigName("config")
	viper.SetConfigType("json")
	viper.AddConfigPath(".")
	err = viper.ReadInConfig()
	if err != nil {
		panic("Cannot load configuration file " + err.Error())
	}
	fmt.Println("Membuka konfigurasi menggunakan file json (tanpa menentukan tipe data dari konfigurasi)")
	fmt.Println(viper.Get("app_name"))
	fmt.Println(viper.Get("app_github_project"))
	fmt.Println(viper.Get("owner"))
	fmt.Println(viper.Get("port"))

	fmt.Println("Membuka konfigurasi menggunakan file json (dengan menentukan tipe data dari konfigurasi)")
	fmt.Println(viper.GetString("app_name"))
	fmt.Println(viper.GetString("app_github_project"))
	fmt.Println(viper.GetString("owner"))
	fmt.Println(viper.GetInt("port"))

	viper.SetConfigName("config")
	viper.SetConfigType("yaml")
	viper.AddConfigPath(".")
	err = viper.ReadInConfig()
	if err != nil {
		panic("Cannot load configuration file " + err.Error())
	}
	fmt.Println("Membuka konfigurasi menggunakan file yaml (tanpa menentukan tipe data dari konfigurasi)")
	fmt.Println(viper.Get("app_name"))
	fmt.Println(viper.Get("app_github_project"))
	fmt.Println(viper.Get("owner"))
	fmt.Println(viper.Get("port"))

	fmt.Println("Membuka konfigurasi menggunakan file yaml (dengan menentukan tipe data dari konfigurasi)")
	fmt.Println(viper.GetString("app_name"))
	fmt.Println(viper.GetString("app_github_project"))
	fmt.Println(viper.GetString("owner"))
	fmt.Println(viper.GetInt("port"))
}


Demikian tutorial singkat mengenai Dimanakah Sebaiknya Menyimpan Konfigurasi di GolangDimanakah Sebaiknya Menyimpan Konfigurasi di Golang. Jika ada pertanyaan silahkan komen dibawah postingan ini. Jika ada kesempatan, insyaAllah saya juga akan membahas mengenai Centralize Configuration yang juga berkaitan dengan materi yang sedang kita bahas sekarang ini. Project ini juga ada saya tulis di github yang bisa dilihat di https://github.com/sardiabuzubayr/go-config.

Semoga bermanfaat, wassalamualaikum warahmatullah wabarakatuh.
loading...
Share:

2 comments:

DigitalOcean Referral Badge
www.domainesia.com
Powered by Blogger.