2016-04-28 18 views
5

क्या इस के बीच का अंतर है:http और डिफ़ॉल्ट servmux के बीच अंतर?

func main() { 

    http.HandleFunc("/page2", Page2) 
    http.HandleFunc("/", Index) 
    http.ListenAndServe(":3000", nil) 
} 

और golang का उपयोग कर की सेवा mux

func main() { 
    mux := http.NewServeMux() 

    mux.HandleFunc("/page2", Page2) 
    mux.HandleFunc("/", Index) 
    http.ListenAndServe(":3000", mux) 
} 

उत्तर

2

ServerMux एक प्रकार है जो Handler इंटरफ़ेस लागू करता है, सभी सर्वरों एक है। आपके पहले उदाहरण में सर्वर केवल डिफ़ॉल्ट हैंडलर का उपयोग करता है। मुझे नहीं लगता कि यहां अंतर हैं क्योंकि NewServeMux द्वारा लौटाया गया मक्स डिफ़ॉल्ट के समान होगा। यह उपलब्ध कराया गया है ताकि आप अनुरोध हैंडलिंग को और अनुकूलित कर सकें।

2

डिफ़ॉल्ट mux की तरह परिभाषित किया गया है:

var DefaultServeMux = NewServeMux() 

तो वहाँ कोई बड़ा अंतर है वास्तव में, जब तक आप आगे अनुकूलित करने के लिए करना चाहते हैं और इसके लिए एक स्पष्ट mux की जरूरत है (उदाहरण के लिए उन्हें किसी कारण श्रृंखला)।

लेकिन चूंकि डिफ़ॉल्ट पहले ही आवंटित किया गया है, किसी भी कारण से किसी अन्य को बनाने की आवश्यकता नहीं है।

8

पहला प्रोग्राम default serve mux का उपयोग करता है। यह अधिक वर्बोज़ के समान है:

func main() { 
    http.DefaultServeMux.HandleFunc("/page2", Page2) 
    http.DefaultServeMux.HandleFunc("/", Index) 
    http.ListenAndServe(":3000", http.DefaultServeMux) 
} 

दो कार्यक्रमों के बीच एक महत्वपूर्ण अंतर नहीं है: पहला कार्यक्रम कार्यक्रम में प्रयुक्त संचालकों पर पूरा नियंत्रण नहीं है। ऐसे पैकेज हैं जो स्वचालित रूप से init() फ़ंक्शंस (example) से डिफ़ॉल्ट सेवा mux के साथ पंजीकृत होते हैं। यदि कार्यक्रम सीधे या परोक्ष रूप से इन पैकेजों में से एक आयात करता है, तो इन हैंडलर द्वारा पंजीकृत हैंडलर पहले कार्यक्रम में सक्रिय होंगे।

दूसरा प्रोग्राम सर्वर के साथ उपयोग किए गए हैंडलर पर पूर्ण नियंत्रण रखता है। डिफॉल्ट सर्विस मक्स के साथ पंजीकृत किसी भी हैंडलर को अनदेखा कर दिया जाता है।

संबंधित मुद्दे