Halo, Habr! Saya sajikan kepada Anda terjemahan artikel
Panduan yang tidak masuk akal untuk variabel lingkungan di Go by Enda Phelan.
Variabel lingkungan adalah cara terbaik untuk menyimpan konfigurasi aplikasi, karena mereka dapat diatur pada tingkat sistem. Ini adalah salah satu prinsip dari metodologi
App Dua Belas-Faktor , memungkinkan Anda untuk memisahkan aplikasi dari sistem di mana mereka berjalan (konfigurasi dapat bervariasi secara signifikan antara penyebaran, kode tidak boleh berbeda).
Menggunakan variabel lingkungan
Semua yang diperlukan untuk berinteraksi dengan variabel lingkungan ada di pustaka standar
os . Ini adalah cara mendapatkan nilai dari variabel lingkungan PATH:
package main import ( "fmt" "os" ) func main() {
Dan - atur nilai variabel:
package main import ( "fmt" "os" ) func main() {
Memuat variabel lingkungan dari file .env
Pada mesin pengembangan, di mana banyak proyek diluncurkan segera, menyimpan parameter di lingkungan variabel tidak selalu nyaman; akan lebih logis untuk membaginya antara proyek menggunakan file env. Anda dapat melakukan ini, misalnya, menggunakan
godotenv - ini adalah
dotenv porting ke perpustakaan Go Ruby. Ini memungkinkan Anda untuk mengatur variabel lingkungan yang diperlukan untuk aplikasi dari file .env.
Untuk menginstal paket, jalankan:
go get github.com/joho/godotenv
Tambahkan pengaturan ke file .env di root proyek:
GITHUB_USERNAME=craicoverflow GITHUB_API_KEY=TCtQrZizM1xeo1v92lsVfLOHDsF7TfT5lMvwSno
Sekarang Anda dapat menggunakan nilai-nilai ini dalam aplikasi:
package main import ( "log" "github.com/joho/godotenv" "fmt" "os" )
Penting untuk diingat bahwa jika nilai variabel lingkungan diatur pada tingkat sistem, Go akan menggunakan nilai ini alih-alih yang ditentukan dalam file env.
Bungkus variabel lingkungan dalam modul konfigurasi
Memang menyenangkan, tentu saja, memiliki akses ke variabel lingkungan secara langsung, seperti yang ditunjukkan di atas, tetapi mempertahankan solusi seperti itu tampaknya agak bermasalah. Nama variabel adalah string, dan jika itu berubah, maka bayangkan sakit kepala yang akan mengakibatkan proses memperbarui referensi variabel di seluruh aplikasi.
Untuk mengatasi masalah ini, kami akan membuat modul konfigurasi untuk bekerja dengan variabel lingkungan dengan cara yang lebih terpusat dan didukung.
Berikut ini adalah modul
konfigurasi sederhana yang mengembalikan parameter konfigurasi dalam struktur
Konfigurasi (kami juga menetapkan nilai parameter default jika tidak ada variabel lingkungan dalam sistem):
package config import ( "os" ) type GitHubConfig struct { Username string APIKey string } type Config struct { GitHub GitHubConfig }
Selanjutnya, tambahkan tipe ke struktur
Config , karena solusi yang ada hanya mendukung tipe string, yang tidak terlalu masuk akal untuk aplikasi besar.
Buat penangan untuk tipe bool, slice dan integer:
package config import ( "os" "strconv" "strings" ) type GitHubConfig struct { Username string APIKey string } type Config struct { GitHub GitHubConfig DebugMode bool UserRoles []string MaxUsers int }
Tambahkan variabel lingkungan baru ke file env kami:
GITHUB_USERNAME=craicoverflow GITHUB_API_KEY=TCtQrZizM1xeo1v92lsVfLOHDsF7TfT5lMvwSno MAX_USERS=10 USER_ROLES=admin,super_admin,guest DEBUG_MODE=false
Sekarang Anda dapat menggunakannya di mana saja di aplikasi:
package main import ( "fmt" "log" "github.com/craicoverflow/go-environment-variables-example/config" "github.com/joho/godotenv" )
Selesai!
Ya, ada paket yang menawarkan solusi turnkey untuk mengkonfigurasi aplikasi Anda, tetapi berapa banyak yang dibutuhkan jika sangat mudah melakukannya sendiri?
Dan bagaimana Anda mengelola konfigurasi di aplikasi Anda?