viper क्या है और इसकी आवश्यकता क्यों है?
Viper, Go (Golang) में एप्लिकेशन के कॉन्फ़िगरेशन प्रबंधन के लिए एक शक्तिशाली लाइब्रेरी है। यह डेवलपमेंट की एक मुख्य समस्या को हल करता है: डेटा स्रोत की परवाह किए बिना, एप्लिकेशन सेटिंग्स का केंद्रीकृत और लचीला प्रबंधन। Viper JSON, TOML, YAML, HCL, INI, envfile और एनवायरनमेंट वेरिएबल्स के साथ काम करने का समर्थन करता है, जो इसे माइक्रोसर्विसेज, CLI-उपयोगिताओं और वेब एप्लिकेशन के लिए एक आदर्श विकल्प बनाता है।
मुख्य विशेषताएं
- अनेक स्रोत: फ़ाइलों (JSON, YAML, TOML), एनवायरनमेंट वेरिएबल्स, रिमोट स्टोरेज (etcd, Consul) और यहां तक कि कमांड-लाइन फ़्लैग्स से पढ़ना।
- प्राथमिकताएं: स्वचालित विरोध समाधान — अंतिम सेट किए गए स्रोत की सर्वोच्च प्राथमिकता होती है।
- Live-रीलोड: एप्लिकेशन को पुनरारंभ किए बिना कॉन्फ़िगरेशन फ़ाइलों में बदलावों को ट्रैक करने की क्षमता (अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता है)।
- नेस्टेड कीज़ के लिए समर्थन: डॉट नोटेशन के माध्यम से सेटिंग्स तक पहुंच (उदाहरण के लिए,
app.db.host)।
स्थापना
मानक Go पैकेज मैनेजर के माध्यम से viper स्थापित करें:
go get github.com/spf13/viperGo पर कोड उदाहरण
एक config.yaml फ़ाइल बनाएं:
app: name: "MyApp" port: 8080database: host: "localhost" user: "admin" password: "secret"कॉन्फ़िगरेशन पढ़ने के लिए viper का उपयोग करने का उदाहरण:
package main
import (\t"fmt"\t"github.com/spf13/viper")
func main() {\tviper.SetConfigName("config")\tviper.SetConfigType("yaml")\tviper.AddConfigPath(".")
\terr := viper.ReadInConfig()\tif err != nil {\t\tpanic(fmt.Errorf("कॉन्फ़िगरेशन पढ़ने में त्रुटि: %w", err))\t}
\tappName := viper.GetString("app.name")\tport := viper.GetInt("app.port")\tdbHost := viper.GetString("database.host")
\tfmt.Printf("App: %s, Port: %d, DB: %s", appName, port, dbHost)}प्रीफ़िक्स के साथ एनवायरनमेंट वेरिएबल्स का भी उपयोग किया जा सकता है:
viper.SetEnvPrefix("MYAPP")viper.AutomaticEnv()// अब MYAPP_APP_PORT वेरिएबल app.port के रूप में उपलब्ध होगाviper का उपयोग कब करें?
- जब कॉन्फ़िगरेशन के कई फ़ॉर्मेट (YAML, JSON, TOML) के लिए समर्थन की आवश्यकता हो।
- उन एप्लिकेशन के लिए जहां सेटिंग्स को एनवायरनमेंट वेरिएबल्स (जैसे, Docker/Kubernetes में) द्वारा ओवरराइड किया जा सकता है।
- माइक्रोसर्विस आर्किटेक्चर में, जहां कॉन्फ़िगरेशन बाहरी सेवाओं (etcd, Consul) से लोड किया जा सकता है।
- यदि कॉन्फ़िगरेशन को dev/staging/production वातावरणों में विभाजित करने की आवश्यकता हो।
Viper, Go समुदाय में कॉन्फ़िगरेशन प्रबंधन के लिए एक डी-फैक्टो मानक है, जिसका उपयोग Hugo, Docker CLI और कई अन्य जैसी परियोजनाओं में किया जाता है।