Saya baru di pemrograman Go, dan saya bertanya-tanya: apa cara yang disukai untuk menangani parameter konfigurasi untuk program Go (jenis barang yang mungkin menggunakan file properti atau file ini untuk, dalam konteks lain)?
go
configuration-files
theglauber
sumber
sumber
Jawaban:
The JSON Format bekerja untuk saya cukup baik. Pustaka standar menawarkan metode untuk menulis indentasi struktur data, sehingga cukup mudah dibaca.
Lihat juga benang golang-kacang ini .
Manfaat JSON adalah cukup mudah untuk mem-parsing dan dapat dibaca / diedit oleh manusia sambil menawarkan semantik untuk daftar dan pemetaan (yang dapat menjadi sangat berguna), yang tidak demikian dengan banyak parser konfigurasi tipe-in.
Contoh penggunaan:
conf.json :
Program untuk membaca konfigurasi
sumber
defer file.Close()
setelah memeriksa kesalahan terbukaPilihan lain adalah menggunakan TOML , yang merupakan format seperti INI yang dibuat oleh Tom Preston-Werner. Saya membuat parser Go untuk itu yang diuji secara ekstensif . Anda dapat menggunakannya seperti opsi lain yang diusulkan di sini. Misalnya, jika Anda memiliki data TOML ini di
something.toml
Kemudian Anda dapat memuatnya ke program Go Anda dengan sesuatu seperti
sumber
Viper adalah sistem manajemen konfigurasi golang yang bekerja dengan JSON, YAML, dan TOML. Terlihat sangat menarik.
sumber
Saya biasanya menggunakan JSON untuk struktur data yang lebih rumit. The downside adalah bahwa Anda dengan mudah berakhir dengan sekelompok kode untuk memberi tahu pengguna di mana kesalahan itu, berbagai kasus tepi dan apa yang tidak.
Untuk konfigurasi dasar (kunci api, nomor port, ...) Saya sudah sangat beruntung dengan paket gcfg . Ini didasarkan pada format git config.
Dari dokumentasi:
Konfigurasi sampel:
Go struct:
Dan kode yang diperlukan untuk membacanya:
Ini juga mendukung nilai slice, sehingga Anda dapat mengizinkan menentukan kunci beberapa kali dan fitur bagus lainnya seperti itu.
sumber
Cukup gunakan flag go standar dengan iniflags .
Bendera go standar memiliki manfaat berikut:
Satu-satunya kelemahan standar go flag miliki - adalah masalah manajemen ketika jumlah flag yang digunakan dalam aplikasi Anda menjadi terlalu besar.
Iniflags secara elegan menyelesaikan masalah ini: cukup modifikasi dua baris dalam paket utama Anda dan secara ajaib mendapatkan dukungan untuk membaca nilai flag dari file ini. Panji dari file ini dapat diganti dengan memberikan nilai baru dalam baris perintah.
Lihat juga https://groups.google.com/forum/#!topic/golang-nuts/TByzyPgoAQE untuk detailnya.
sumber
go test
jangan biarkan saya melewati flag) sementara file config tidak.*FlagName = value
Saya sudah mulai menggunakan Gcfg yang menggunakan file seperti ini. Sederhana - jika Anda menginginkan sesuatu yang sederhana, ini adalah pilihan yang baik.
Berikut kode pemuatan yang saya gunakan saat ini, yang memiliki pengaturan default dan memungkinkan bendera baris perintah (tidak ditampilkan) yang menimpa beberapa konfigurasi saya:
sumber
lihat di gonfig
sumber
https://github.com/spf13/viper dan https://github.com/zpatrick/go-config adalah pustaka yang cukup bagus untuk file konfigurasi.
sumber
Gunakan toml seperti artikel ini Membaca file konfigurasi cara Go
sumber
Saya menulis perpustakaan konfigurasi ini di golang.
https://github.com/c4pt0r/cfg
goroutine-safe, mudah digunakan
=================== Perbarui =======================
Baru-baru ini saya membutuhkan parser INI dengan dukungan bagian, dan saya menulis paket sederhana:
Anda dapat menguraikan INI seperti menggunakan paket "flag":
sumber
Anda mungkin juga tertarik dengan go-libucl , sekumpulan Go bindings untuk UCL, Bahasa Konfigurasi Universal. UCL sedikit mirip dengan JSON, tetapi dengan dukungan yang lebih baik untuk manusia: mendukung komentar dan konstruksi yang dapat dibaca manusia seperti pengganda SI (10k, 40M, dll.) Dan memiliki pelat boiler yang sedikit lebih sedikit (misalnya, kutipan di sekitar kunci). Ini sebenarnya cukup dekat dengan format file konfigurasi nginx, jika Anda sudah terbiasa dengan itu.
sumber
Saya setuju dengan nemo dan saya menulis sedikit alat untuk membuatnya semuanya mudah.
bitbucket.org/gotamer/cfg adalah paket konfigurasi json
Lihat doc.go untuk contoh
sumber
Saya mencoba JSON. Itu berhasil. Tapi saya benci harus membuat struct dari bidang dan tipe yang tepat yang mungkin saya atur. Bagi saya itu menyakitkan. Saya perhatikan itu adalah metode yang digunakan oleh semua opsi konfigurasi yang bisa saya temukan. Mungkin latar belakang saya dalam bahasa yang dinamis membuat saya buta akan manfaat dari kata-kata seperti itu. Saya membuat format file konfigurasi sederhana yang baru, dan lib ish yang lebih dinamis untuk membacanya.
https://github.com/chrisftw/ezconf
Saya cukup baru di dunia Go, jadi mungkin bukan jalan Go. Tapi itu berhasil, cukup cepat, dan super mudah digunakan.
Pro
Cons
sumber