Her projenin olmazsa olmazıdır ayar (konfigürasyon) dosyaları. Son zamanlarda bu maksatla .env (dotenv) kullanımı yaygınlaşmış olsa da, ben özellikle Go Programlama Dili ile oluşturduğum projelerde JSON kullanmayı tercih ediyorum. Bu yazıya temel olması için hazırladığım goconf mini projesinde de go ile json kullanımını göstermeye çalıştım.
Go ile Dosya Okuma
Ayar dosyası adı üstünde bir dosyadır (file). Demek ki buradaki mesele JSON formatındaki bir dosyadan verileri go projesine çekmek. Aslında go ile dosya işlemlerini zaten anlatmıştım. İlgili yazıda belirtilen konuları burada pratiğe döktüğümüzü görebilirsiniz.
JSON Ayar Dosyası
Ayar dosyamızın (conf.json) içeriği şu şekilde:
{ "Animal" : "Elephant", "Fruits" : ["Apple", "Banana"], "Quantity" : 100 }
Bilerek 3 farklı değişken tipi kullandım. Görebileceğiniz gibi Animal string, Fruits string’lerden oluşan bir dizi ve Quantity integer tipinde değişkenlerdir.
Go ile JSON Dosya İçeriğini Çekme
Go ile json dosyasını okuduğumuz ve buradaki verileri projede kullanılabilir hale getirdiğimiz kodlarımız şu şekildedir:
package main import ( "encoding/json" "fmt" "os" ) // Conf struct to handle variables type Conf struct { Animal string Fruits []string Quantity int } func main() { file, _ := os.Open("conf.json") defer file.Close() decoder := json.NewDecoder(file) conf := Conf{} err := decoder.Decode(&conf) if err != nil { panic(err) } fmt.Println("Animal :", conf.Animal) fmt.Println("Fruits :", conf.Fruits) fmt.Println("Quantity :", conf.Quantity) /* Output Animal : Elephant Fruits : [Apple Banana] Quantity : 100 */ }
Özetlemek gerekirse burada şunları yapıyoruz:
- Ayar dosyamızdaki değişkenlere uygun bir struct (Conf) oluşturuyoruz.
- Open ve json methodları yardımıyla json dosyamızdaki verileri Conf struct’ına atıyoruz. Hepsi bu kadar.
Github Sayfası ve Son Sözler
Yine bir Go Programlama Dili yazısının sonuna geldik. Özetleyecek olursak bu yazıda go projelerinizde kullanabileceğiniz json formatındaki bir ayar dosyasının nasıl kullanılabileceğimizi görmüş olduk.
goconf ismini verdiğim mini projenin kodlarında github sayfasından ulaşabilrsiniz.
Burada anlatmış olduğum konu konfigürasyon dosyaları için başlangıç düzeyinde olup, hazır paket olarak gelişmiş bir çözüm arıyorsanız viper, nispeten daha sade ve basit bir çözüm arıyorsanız joshbetz/config paketini tavsiye edebilirim.
Sevgiler, saygılar…