Selamlar,
Yaptığım küçük çalışmalardan birinde Json üzerinden bazı parametreleri, Özellikle DB parametrelerini, nasıl okunacağı ile ilgili araştırma yaparken buldum. Bulduklarımı sizlerle paylaşmak isterim.
Parametre dosyamız aşağıdaki gibi olsun;
{
"user": "ottocc_user",
"password": "123",
"host": "localhost",
"dbname": "ottocc"
}
Bu parametre dosyasını go üzerinden okumak için (go versiyonu: 1.5.2) standart kütüphaneler yeterli olacaktır. Daha detaylı bilgi için; http://blog.golang.org/json-and-go.
- Öncelikle parametre dosyasını ifade edecek bir struct a ihtiyacımız var. Örnek aşağıdaki gibi;
type JsonConfType struct { User string Password string Host string DbName string }
- Daha sonra bu parametre dosyasının disk üzerinden başarı ile okunması gerekiyor.
fileArr, err := ioutil.ReadFile(fileName) if err != nil { log.Fatalln("[conf.Load] Error at file read, ", err) return nil }
- Bu aşamadan sonra *struct* bilgisi için hafızadan yer ayrılır.
[code lang=”go”]
JsonConf = new(JsonConfType) - Son olarak ise disk üzerinden okuduğumuz verileri oluşturduğumuz ve hafızada yer ayırdığımız struct a yerleştirmemiz gerekiyor. Bu işlem için aşağıdaki Unmarshal işlemi yeterli olacaktır;
err = json.Unmarshal(fileArr, &conf.JsonConf) if err != nil { log.Fatalf("[conf.Load] error at unmarshall conf", err) return nil }
Tüm bu işlemler sonrasında hafızada yer oluşturduğumuz struct ı aşağıdaki gibi kullanabiliriz;
fmt.Printf("user=%s password=%s host=%s dbname=%s sslmode=disable", conf.JsonConf.User, conf.JsonConf.Password, conf.JsonConf.Host, conf.JsonConf.DbName)
Püf noktaları;
1. Disk üzerinden okuma işlemi oldukça pahalı olduğu için parametre dosyasını struct’a bir kez taşımaya çalışın.
2. Unmarshal işleminden sonra parametreleri çalışma zamanında değiştirip marshal ile parametre dosyasına geri yazabilirsiniz. Programınız tekrar çalıştığında değişen parametreleri okuyup, tekrar açılma sonrasında program kaldığı yerden çalışmaya devam edebilir.
Kolay gelsin.