Hindley-Milner प्रकार का प्रयोग Hindley-Milner प्रकार सिस्टम के लिए उपयोग किया जाता है, सिस्टम-एफ प्रकार सिस्टम का प्रतिबंध। एचएम प्रकार प्रणालियों की दिलचस्प विशेषता यह है कि उनके पास है पैरामीट्रिक पॉलीमॉर्फिज़्म (उर्फ जेनरिक) है। यह एक सबसे बड़ी प्रकार की प्रणाली की विशेषता है जिसे गोलंग ने मना कर दिया है।
उस निराशाजनक प्रतिबंध के साथ, एचएम-शैली प्रकार का अनुमान असंभव है। आइए अनछुए कोड को देखें:
func f(a) {
return a.method()
}
किस प्रकार का है f? हम देख सकते हैं कि aएक विधि होनी चाहिए, इसलिए हम एक अनाम इंटरफ़ेस का उपयोग कर सकते हैं func f(a interface { method() ??? }) ???:। हालांकि, हमें पता नहीं है कि वापसी का प्रकार क्या है। प्रकार चर के साथ, हम प्रकार की घोषणा कर सकते हैं
func f[T](a interface{ method() T }) T
हालाँकि, गो में प्रकार चर नहीं हैं इसलिए यह काम नहीं करेगा। जबकि निहित इंटरफेस प्रकार के अनुमान के कुछ पहलुओं को आसान बनाते हैं, अब हमारे पास फ़ंक्शन कॉल के रिटर्न प्रकार का पता लगाने का कोई तरीका नहीं है। एचएम-सिस्टम को निहित होने के बजाय सभी कार्यों को घोषित करने की आवश्यकता होती है, और प्रत्येक नाम में केवल एक ही प्रकार हो सकता है (जबकि गो के तरीके अलग-अलग इंटरफेस में अलग-अलग प्रकार के हो सकते हैं)।
इसके बजाय, गो की आवश्यकता है कि फ़ंक्शन हमेशा पूरी तरह से घोषित किए जाते हैं, लेकिन चर प्रकार का उपयोग करने की अनुमति देता है। यह संभव है क्योंकि एक असाइनमेंट के दाहिने हाथ की ओरvariable := expression पहले से ही कार्यक्रम के उस बिंदु पर एक ज्ञात प्रकार है। इस तरह के प्रकार का अनुमान सरल, सही और रैखिक है।
- एक चर के प्रकार को तुरंत घोषणा के बिंदु पर जाना जाता है, जबकि एचएम इंट्रेंस को पहले पूरे कार्यक्रम को संभावित रूप से टाइप-चेक करना पड़ता है। यह त्रुटि संदेशों की गुणवत्ता पर भी ध्यान देने योग्य प्रभाव डालता है।
- एचएम के विपरीत, गो का प्रकार का निष्कर्ष दृष्टिकोण हमेशा एक चर के लिए सबसे विशिष्ट प्रकार का चयन करेगा, जो सबसे सामान्य प्रकार को चुनता है। गो के निहित इंटरफेस के साथ, यह उप-सफाई के साथ सफाई से काम करता है।