गो (प्रोग्रामिंग लैंग्वेज)

गो एक स्थिर टाइपिंग, संकलित भाषा उच्च-स्तरीय प्रोग्रामिंग भाषा है | Google द्वारा डिज़ाइन की गई उच्च-स्तरीय प्रोग्रामिंग भाषा है रॉबर्ट ग्रिसेमर (कंप्यूटर प्रोग्रामर), रोब पाइक और केन थॉम्पसन द्वारा। यह C (प्रोग्रामिंग लैंग्वेज) के समान सिंटैक्स (प्रोग्रामिंग भाषाएं) है, लेकिन स्मृति सुरक्षा, कचरा संग्रह (कंप्यूटर साइंस), संरचनात्मक प्रकार प्रणाली, और अनुक्रमिक प्रक्रियाओं-शैली संगामिति (कंप्यूटर विज्ञान) का संचार करना। इसके पूर्व डोमेन नाम के कारण इसे अक्सर गोलंग कहा जाता है,, लेकिन इसका उचित नाम गो है। दो प्रमुख कार्यान्वयन हैं:

एक तृतीय-पक्ष स्रोत-से-स्रोत संकलक, गोफरजेएस, कंपाइल फ्रंट-एंड वेब विकास के लिए जावास्क्रिप्ट पर जाएं।
 * गूगल की स्व-होस्टिंग (संकलक)संकलक)|सेल्फ-होस्टिंग gc संकलक toolchain, कई ऑपरेटिंग सिस्टम और WebAssembly को लक्षित करता है।
 * gofrontend, libgo लाइब्रेरी के साथ अन्य कंपाइलर्स के लिए एक दृश्यपटल। GNU संकलक संग्रह के साथ संयोजन gccgo है; एलएलवीएम के साथ संयोजन गोलवम है।

इतिहास
गो को 2007 में मल्टी-कोर प्रोसेसर, संगणक संजाल कंप्यूटर और बड़े codebase के युग में प्रोग्रामिंग उत्पादकता में सुधार के लिए डिज़ाइन किया गया था। डिज़ाइनर Google में उपयोग में आने वाली अन्य भाषाओं की आलोचना को संबोधित करना चाहते थे, लेकिन उनकी उपयोगी विशेषताओं को बनाए रखना चाहते थे:
 * स्टेटिक टाइपिंग और रन टाइम (प्रोग्राम जीवनचक्र चरण) | रन-टाइम दक्षता (जैसे सी (प्रोग्रामिंग लैंग्वेज))
 * पठनीयता और उपयोगिता (जैसे पायथन (प्रोग्रामिंग भाषा) या जावास्क्रिप्ट)
 * उच्च प्रदर्शन कंप्यूटर नेटवर्क और बहु

इसके डिजाइनर मुख्य रूप से C++|C++ की नापसंदगी की उनकी साझा आलोचना से प्रेरित थे। गो की सार्वजनिक रूप से नवंबर 2009 में घोषणा की गई थी, और संस्करण 1.0 मार्च 2012 में जारी किया गया था। Google में उत्पादन में गो का व्यापक रूप से उपयोग किया जाता है और कई अन्य संगठनों और ओपन-सोर्स प्रोजेक्ट्स में।

ब्रांडिंग और स्टाइल
भाषा के खुला स्त्रोत लॉन्च के लिए 2009 में गोफर शुभंकर पेश किया गया था। सी से उधार लिया गया डिज़ाइन। 2000 WFMU पदोन्नति। नवंबर 2016 में, गो एंड गो मोनो फोंट टाइप डिज़ाइनर चार्ल्स बिगेलो (टाइप डिज़ाइनर) और क्रिस होम्स द्वारा विशेष रूप से गो प्रोजेक्ट द्वारा उपयोग के लिए जारी किए गए थे। गो एक मानवतावादी सैंस-सेरिफ़ है जो ल्यूसिडा ग्रांडे जैसा दिखता है, और गो मोनो प्रयुक्त होते है। दोनों फॉन्ट WGL4 कैरेक्टर सेट का पालन करते हैं और एक बड़ी एक्स-ऊंचाई और अलग लेटरफॉर्म के साथ सुपाठ्य होने के लिए डिजाइन किए गए थे। गो और गो मोनो दोनों डीआईएन 1450 मानक का पालन करते हैं, जिसमें शून्य, लोअरकेस घटाया गया है  एक पूंछ और एक अपरकेस के साथ   सेरिफ़ के साथ। अप्रैल 2018 में, मूल लोगो को पीछे की ओर स्ट्रीमलाइन के साथ दाहिनी ओर झुकी हुई स्टाइलिश GO से बदल दिया गया था। (गोफर शुभंकर वही रहा। )

जेनरिक
गो के शुरुआती संस्करणों में सामान्य प्रोग्रामिंग के समर्थन की कमी ने काफी आलोचना की। डिजाइनरों ने सामान्य प्रोग्रामिंग के लिए एक खुलापन व्यक्त किया और नोट किया कि अंतर्निहित कार्य वास्तव में टाइप-जेनेरिक थे, लेकिन उन्हें विशेष मामलों के रूप में माना जाता है; पाइक ने इसे एक कमजोरी कहा है जिसे किसी बिंदु पर बदला जा सकता है। Google टीम ने जेनरिक के साथ प्रायोगिक गो बोली के लिए कम से कम एक संकलक बनाया, लेकिन इसे जारी नहीं किया। अगस्त 2018 में, गो प्रमुख योगदानकर्ताओं ने सामान्य प्रोग्रामिंग और अपवाद हैंडलिंग के लिए ड्राफ्ट डिज़ाइन प्रकाशित किए और उपयोगकर्ताओं से प्रतिक्रिया प्रस्तुत करने के लिए कहा। हालाँकि, त्रुटि प्रबंधन प्रस्ताव को अंततः छोड़ दिया गया था। जून 2020 में, एक नया मसौदा डिजाइन दस्तावेज़ प्रकाशित किया गया था जो सामान्य कार्यों और प्रकारों को घोषित करने के लिए गो में आवश्यक सिंटैक्स जोड़ देगा। एक कोड अनुवाद उपकरण,go2go, उपयोगकर्ताओं को ऑनलाइन गो प्लेग्राउंड के जेनरिक-सक्षम संस्करण के साथ नए सिंटैक्स को आज़माने की अनुमति देने के लिए प्रदान किया गया था। जेनरिक को अंततः 1.18 संस्करण में गो में जोड़ा गया।

वर्जनिंग
जाओ 1 अनुकूलता की गारंटी देता है भाषा विनिर्देश और मानक पुस्तकालय के प्रमुख भागों के लिए। वर्तमान गो 1.19 रिलीज़ तक के सभी संस्करण इस वादे को कायम रखा है।

प्रत्येक प्रमुख गो रिलीज़ तब तक समर्थित है जब तक दो नए प्रमुख रिलीज़ नहीं हो जाते।

डिजाइन
गो सी (प्रोग्रामिंग लैंग्वेज) से प्रभावित है (विशेष रूप से बेल लैब्स बोली (कंप्यूटिंग) से प्लान 9) ), लेकिन अधिक सादगी और सुरक्षा पर जोर देने के साथ। यह होते हैं:
 * गतिशील प्रोग्रामिंग भाषाओं में पैटर्न को अपनाने वाला एक सिंटैक्स और पर्यावरण अधिक सामान्य है:
 * दूरस्थ पैकेज प्रबंधन और ऑनलाइन पैकेज प्रलेखन
 * विशेष समस्याओं के लिए विशिष्ट दृष्टिकोण:
 * बिल्ट-इन कंकरेंसी प्रिमिटिव्स: हल्के वजन की प्रक्रिया (गोरोटीन्स), चैनल (प्रोग्रामिंग), और  कथन
 * आभासी विरासत के स्थान पर एक प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) सिस्टम, और गैर-वर्चुअल इनहेरिटेंस के बजाय एम्बेडिंग टाइप करें
 * एक टूलचैन, जो डिफ़ॉल्ट रूप से, बाहरी गो निर्भरता के बिना स्थिर पुस्तकालय नेटिव बायनेरिज़ बनाता है
 * भाषा विनिर्देश को एक प्रोग्रामर के दिमाग में रखने के लिए पर्याप्त सरल रखने की इच्छा, आंशिक रूप से #Omissions द्वारा।

सिंटेक्स
गो के सिंटैक्स में कोड को संक्षिप्त और पठनीय रखने के उद्देश्य से C (प्रोग्रामिंग लैंग्वेज) से परिवर्तन शामिल हैं। एक संयुक्त घोषणा/प्रारंभिक ऑपरेटर पेश किया गया था जो प्रोग्रामर को लिखने की अनुमति देता है  या , उपयोग किए गए चर का प्रकार अनुमान। यह C के विपरीत है   और. अर्धविराम अभी भी बयानों को समाप्त करते हैं;{{efn|But "To allow complex statements to occupy a single line, a semicolon may be omitted before a closing ) or }". }} लेकिन निहित हैं जब एक पंक्ति का अंत होता है। तरीके कई मान लौटा सकते हैं, और एक वापस कर सकते हैं  जोड़ी परंपरागत तरीका है एक विधि अपने कॉलर को गो में एक त्रुटि इंगित करती है। नाम से संरचना मापदंडों को आरंभ करने और साहचर्य सरणी और ऐरे स्लाइसिंग को आरंभ करने के लिए गो विज्ञापन शाब्दिक सिंटैक्स। C के तीन-कथनों के विकल्प के रूप में   पाश, जाओ   भाव सरणियों, स्लाइस, स्ट्रिंग्स, मैप्स और चैनलों पर संक्षिप्त पुनरावृत्ति की अनुमति देते हैं।

प्रकार
गो में कई बिल्ट-इन प्रकार हैं, जिनमें संख्यात्मक वाले शामिल हैं (byte, int64, float32, आदि), बूलियन डेटा प्रकार, और बाइट स्ट्रिंग्स (string). तार अपरिवर्तनीय हैं; बिल्ट-इन ऑपरेटर्स और कीवर्ड्स (फ़ंक्शंस के बजाय) संयोजन, तुलना और UTF-8 एन्कोडिंग/डिकोडिंग प्रदान करते हैं। रिकॉर्ड (कंप्यूटर विज्ञान) के साथ परिभाषित किया जा सकता है struct कीवर्ड। प्रत्येक प्रकार के लिए T और प्रत्येक गैर-ऋणात्मक पूर्णांक स्थिरांक n, एक सरणी डेटा प्रकार निरूपित किया गया है [n]T; अलग-अलग लंबाई के सरणियाँ इस प्रकार विभिन्न प्रकार की होती हैं। डायनेमिक सरणियाँ स्लाइस के रूप में उपलब्ध हैं, जिन्हें दर्शाया गया है []T किसी प्रकार के लिए T. इनकी लंबाई और क्षमता निर्दिष्ट होती है जब सरणी का विस्तार करने के लिए नई मेमोरी आवंटित करने की आवश्यकता होती है। कई स्लाइस उनकी अंतर्निहित स्मृति साझा कर सकते हैं। पॉइंटर (कंप्यूटर प्रोग्रामिंग) सभी प्रकार के लिए उपलब्ध हैं, और पॉइंटर-टू-T प्रकार बताया गया है *T. संबोधन-ग्रहण और अप्रत्यक्ष उपयोग करते हैं &amp; और * ऑपरेटरों, सी के रूप में, या विधि कॉल या विशेषता एक्सेस सिंटैक्स के माध्यम से अंतर्निहित रूप से होता है। कोई सूचक अंकगणित नहीं है, विशेष के माध्यम से छोड़कर unsafe.Pointer मानक पुस्तकालय में टाइप करें। एक जोड़ी प्रकार के लिए K, V, प्ररूप map[K]V हैश तालिका मैपिंग प्रकार का प्रकार है-K कुंजी टाइप करने के लिए-V मान। विशेष सिंटैक्स और बिल्ट-इन फ़ंक्शंस के साथ हैश टेबल भाषा में निर्मित होते हैं। chan T एक चैनल है जो #Concurrency के बीच T प्रकार के मान भेजने की अनुमति देता है।
 * 1) Interfaces के लिए इसके समर्थन के अलावा, Go नाममात्र प्रकार प्रणाली नाममात्र प्रकार का सिस्टम है: type कीवर्ड का उपयोग एक नए नामित प्रकार को परिभाषित करने के लिए किया जा सकता है, जो अन्य नामित प्रकारों से अलग है जिनका समान लेआउट है (एक के मामले में) struct, वही सदस्य उसी क्रम में)। प्रकारों के बीच कुछ रूपांतरण (जैसे, विभिन्न पूर्णांक प्रकारों के बीच) पूर्व-परिभाषित होते हैं और एक नया प्रकार जोड़ने से अतिरिक्त रूपांतरण परिभाषित हो सकते हैं, लेकिन नामित प्रकारों के बीच रूपांतरणों को हमेशा स्पष्ट रूप से लागू किया जाना चाहिए। उदाहरण के लिए, द type 32-बिट अहस्ताक्षरित पूर्णांकों के आधार पर IPv4 पतों के लिए एक प्रकार को परिभाषित करने के लिए कीवर्ड का उपयोग किया जा सकता है:

<वाक्यविन्यास प्रकाश लैंग = जाओ> IPv4addr uint32 टाइप करें 

इस प्रकार की परिभाषा के साथ, ipv4addr(x) व्याख्या करता है uint32 कीमत x एक आईपी पते के रूप में। बस असाइन करना x प्रकार के एक चर के लिए ipv4addr प्रकार की त्रुटि है। स्थिर भाव या तो टाइप किए गए या अनटाइप किए गए हो सकते हैं; टाइप किए गए चर को असाइन किए जाने पर उन्हें एक प्रकार दिया जाता है यदि वे जिस मान का प्रतिनिधित्व करते हैं वह संकलन-समय की जांच पास करता है। सबरूटीन प्रकार इसके द्वारा इंगित किए जाते हैं func कीवर्ड; वे शून्य या अधिक पैरामीटर (कंप्यूटर प्रोग्रामिंग) लेते हैं और वापसी कथन शून्य या अधिक मान देते हैं, जो सभी टाइप किए जाते हैं। पैरामीटर और वापसी मान एक फ़ंक्शन प्रकार निर्धारित करते हैं; इस प्रकार, func(string, int32) (int, error) कार्यों का प्रकार है जो a लेता है string और एक 32-बिट हस्ताक्षरित पूर्णांक, और एक हस्ताक्षरित पूर्णांक (डिफ़ॉल्ट चौड़ाई का) और अंतर्निर्मित इंटरफ़ेस प्रकार का मान लौटाता है error. किसी भी नामित प्रकार के साथ एक विधि (कंप्यूटर प्रोग्रामिंग) जुड़ा हुआ है। ऊपर दिए गए IP पते के उदाहरण को यह जाँचने के लिए एक विधि के साथ बढ़ाया जा सकता है कि क्या उसका मान एक ज्ञात मानक है:

<वाक्यविन्यास प्रकाश लैंग = जाओ> // ZeroBroadcast रिपोर्ट करता है कि क्या Addr 255.255.255.255 है। func (Addr ipv4addr) जीरो ब्रॉडकास्ट बूल { वापसी Addr == 0xFFFFFFFF } 

नाममात्र टाइपिंग के कारण, यह विधि परिभाषा में एक विधि जोड़ती है ipv4addr, लेकिन चालू नहीं uint32. जबकि विधियों की विशेष परिभाषा और कॉल सिंटैक्स है, कोई विशिष्ट विधि प्रकार नहीं है।

इंटरफ़ेस सिस्टम
गो दो सुविधाएँ प्रदान करता है जो वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग) को प्रतिस्थापित करती हैं। पहला एम्बेडिंग है, जिसे वस्तु रचना के एक स्वचालित रूप के रूप में देखा जा सकता है। दूसरा इसका प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) है, जो रनटाइम बहुरूपता प्रदान करता है। इंटरफेस प्रकार का एक वर्ग है और गो के अन्यथा नाममात्र प्रकार की प्रणाली में संरचनात्मक प्रकार की प्रणाली का एक सीमित रूप प्रदान करता है। एक वस्तु जो एक इंटरफ़ेस प्रकार की होती है, वह दूसरे प्रकार की भी होती है, जैसे कि C++ वस्तुएँ एक साथ आधार और व्युत्पन्न वर्ग की होती हैं। गो इंटरफेस को स्मॉलटाक प्रोग्रामिंग लैंग्वेज से प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) के बाद डिजाइन किया गया था। गो इंटरफेस का वर्णन करते समय कई स्रोत बतख टाइपिंग शब्द का उपयोग करते हैं।  हालांकि डक टाइपिंग शब्द सटीक रूप से परिभाषित नहीं है और इसलिए गलत नहीं है, आमतौर पर इसका तात्पर्य यह है कि प्रकार के अनुरूपता को सांख्यिकीय रूप से जांचा नहीं जाता है। चूंकि गो इंटरफ़ेस के अनुरूप गो कंपाइलर द्वारा स्थिर रूप से जांच की जाती है (एक प्रकार का दावा करने के अलावा), गो लेखक स्ट्रक्चरल टाइपिंग शब्द को पसंद करते हैं। इंटरफ़ेस प्रकार की परिभाषा नाम और प्रकार द्वारा आवश्यक विधियों को सूचीबद्ध करती है। टाइप टी का कोई भी ऑब्जेक्ट जिसके लिए इंटरफ़ेस टाइप I के सभी आवश्यक तरीकों से मेल खाने वाले फ़ंक्शन मौजूद हैं, टाइप I का एक ऑब्जेक्ट भी है। टाइप टी की परिभाषा को टाइप I की पहचान करने की आवश्यकता नहीं है (और नहीं कर सकती)। उदाहरण के लिए, यदि Shape, Square and Circle के रूप में परिभाषित किया गया है

<वाक्यविन्यास प्रकाश लैंग = जाओ> गणित आयात करें

आकार इंटरफ़ेस टाइप करें { एरिया फ्लोट64 }

स्क्वायर स्ट्रक्चर टाइप करें {// नोट: कोई कार्यान्वयन घोषणा नहीं है साइड फ्लोट64 }

func (वर्ग वर्ग) क्षेत्र फ्लोट64 {वापसी वर्ग पक्ष * वर्ग पक्ष}

सर्किल संरचना टाइप करें {// यहां कोई भी घोषणा लागू नहीं करता है रेडियस फ्लोट64 }

func (सी सर्किल) क्षेत्र फ्लोट64 {वापसी गणित। पीआई * गणित। पाउ (सी। त्रिज्या, 2)} 

फिर दोनों ए Square और ए Circle परोक्ष रूप से ए हैं Shape और ए को सौंपा जा सकता है Shapeटाइप किया हुआ चर। औपचारिक भाषा में, गो की इंटरफ़ेस प्रणाली नाममात्र प्रकार की सिस्टम टाइपिंग के बजाय संरचनात्मक प्रकार की प्रणाली प्रदान करती है। इंटरफेस एक संयुक्त इंटरफ़ेस बनाने के प्रभाव से अन्य इंटरफेस को एम्बेड कर सकते हैं जो एम्बेडेड इंटरफ़ेस को लागू करने वाले प्रकारों और नए परिभाषित इंटरफ़ेस को जोड़ने वाली किसी भी विधि से संतुष्ट है। गो मानक पुस्तकालय कई स्थानों पर सामान्यता प्रदान करने के लिए इंटरफेस का उपयोग करता है, जिसमें इनपुट / आउटपुट सिस्टम शामिल है जो कि अवधारणाओं पर आधारित है। Reader और Writer. इंटरफ़ेस में कॉलिंग विधियों के अलावा, गो इंटरफ़ेस मानों को रन-टाइम प्रकार की जाँच के साथ अन्य प्रकारों में परिवर्तित करने की अनुमति देता है। ऐसा करने के लिए भाषा का निर्माण प्रकार का दावा है, जो एक संभावित प्रकार के खिलाफ जांच करता है: और प्रकार स्विच, जो कई प्रकार के विरुद्ध जाँच करता है:<वाक्यविन्यास प्रकाश लैंग = जाओ> func (वर्ग वर्ग) विकर्ण फ्लोट64 {वापसी sq.side * गणित.Sqrt2} func (सी सर्किल) व्यास फ्लोट64 {रिटर्न 2 * सी.रेडियस}

func LongestContainedLine (shp शेप) फ्लोट64 { स्विच वी: = एसएचपी। (प्रकार) { केस स्क्वायर: वापसी v.Diagonal // या, प्रकार के दावे के साथ, shp। (स्क्वायर)। विकर्ण केस सर्किल: वापसी v.Diameter // या, प्रकार के दावे के साथ, shp। (वृत्त)। व्यास गलती करना: वापसी 0 // व्यवहार में, इसे त्रुटियों के साथ संभाला जाना चाहिए } } खाली इंटरफ़ेस  एक महत्वपूर्ण आधार मामला है क्योंकि यह किसी भी ठोस प्रकार की वस्तु को संदर्भित कर सकता है। यह के समान है Object जावा में क्लास (प्रोग्रामिंग लैंग्वेज) या सी शार्प (प्रोग्रामिंग लैंग्वेज) | सी # और किसी भी प्रकार से संतुष्ट है, जिसमें बिल्ट-इन प्रकार शामिल हैं int. खाली इंटरफ़ेस का उपयोग करने वाला कोड संदर्भित ऑब्जेक्ट पर केवल विधियों (या अंतर्निर्मित ऑपरेटरों) को कॉल नहीं कर सकता है, लेकिन यह स्टोर कर सकता है  मूल्य, इसे एक प्रकार के दावे या प्रकार स्विच के माध्यम से अधिक उपयोगी प्रकार में बदलने का प्रयास करें, या इसे गो के साथ निरीक्षण करें   पैकेट। क्योंकि   किसी भी मूल्य को संदर्भित कर सकता है, यह स्थिर टाइपिंग के प्रतिबंधों से बचने का एक सीमित तरीका है, जैसे   सी में लेकिन अतिरिक्त रन-टाइम टाइप चेक के साथ।

e> प्रकार का उपयोग गो में किसी भी मनमाना स्कीमा के संरचित डेटा को मॉडल करने के लिए किया जा सकता है, जैसे कि JSON या YAML डेटा, इसे एक के रूप में प्रस्तुत करके  (खाली इंटरफ़ेस के लिए स्ट्रिंग का नक्शा)। यह पुनरावर्ती रूप से स्ट्रिंग कुंजियों और किसी भी प्रकार के मानों के साथ शब्दकोश के रूप में डेटा का वर्णन करता है। डेटा के लिए सूचक और रन-टाइम प्रकार की जानकारी के लिए एक दूसरे सूचक का उपयोग करके इंटरफ़ेस मान लागू किए जाते हैं। गो में पॉइंटर्स का उपयोग करके लागू किए गए कुछ अन्य प्रकारों की तरह, इंटरफ़ेस मान हैं  अगर अप्रारंभीकृत।

पैरामिट्रीकृत प्रकार का उपयोग कर सामान्य कोड
संस्करण 1.18 के बाद से, गो पैरामीटरयुक्त प्रकारों का उपयोग करके सामान्य कोड का समर्थन करता है।

पैकेज सिस्टम
गो के पैकेज सिस्टम में, प्रत्येक पैकेज का एक पथ होता है (उदाहरण के लिए,  या  ) और एक नाम (उदा.,   या  ). अन्य पैकेज की परिभाषाओं के सन्दर्भ हमेशा दूसरे पैकेज के नाम के साथ शुरू होने चाहिए, और अन्य पैकेजों से केवल बड़े अक्षरों में नाम ही पहुँच योग्य हैं:  सार्वजनिक है लेकिन   क्या नहीं है।    ई> कमांड रिमोट रिपॉजिटरी में संग्रहीत पैकेजों को पुनः प्राप्त कर सकता है और डेवलपर्स को मानक पुस्तकालय या अन्य बाहरी पुस्तकालयों में भविष्य के परिवर्धन के साथ नाम टकराव की संभावना को कम करने के लिए एक स्रोत रिपॉजिटरी (जैसे example.com/user_name/package_name) के अनुरूप आधार पथ के अंदर पैकेज विकसित करने के लिए प्रोत्साहित किया जाता है।

संगामिति: goroutines और चैनल
समसामयिक प्रोग्रामिंग लिखने के लिए गो भाषा में अंतर्निहित सुविधाएं हैं, साथ ही पुस्तकालय समर्थन भी है। संगामिति न केवल सीपीयू समांतरता को संदर्भित करता है, बल्कि एसिंक्रोनस I/O को भी संदर्भित करता है: डेटाबेस या नेटवर्क जैसे धीमे संचालन को चलाने देता है, जबकि प्रोग्राम अन्य काम करता है, जैसा कि घटना-आधारित सर्वरों में आम है। प्राथमिक संगामिति निर्माण गोरोइन है, एक प्रकार की हल्की-फुल्की प्रक्रिया। एक फ़ंक्शन कॉल जिसके साथ उपसर्ग किया गया है  कीवर्ड एक नए गोरोइन में कार्य शुरू करता है। भाषा विनिर्देश यह निर्दिष्ट नहीं करता है कि goroutines को कैसे लागू किया जाना चाहिए, लेकिन वर्तमान कार्यान्वयन एक गो प्रक्रिया के goroutines को थ्रेड (कंप्यूटर साइंस) के एक छोटे सेट पर मल्टीप्लेक्स करता है। ऑपरेटिंग-सिस्टम थ्रेड्स, Erlang (प्रोग्रामिंग लैंग्वेज) में किए गए शेड्यूलिंग के समान। जबकि अधिकांश शास्त्रीय संगामिति नियंत्रण संरचनाओं (म्युटेक्स ताले, आदि) की विशेषता वाला एक मानक पुस्तकालय पैकेज उपलब्ध है, मुहावरेदार समवर्ती कार्यक्रम इसके बजाय चैनलों को पसंद करते हैं, जो संदेश गोरोइन के बीच से गुजरते हैं। वैकल्पिक बफ़र संदेशों को FIFO (कंप्यूटिंग और इलेक्ट्रॉनिक्स) क्रम में संग्रहीत करते हैं और उनके संदेश प्राप्त होने से पहले goroutines को भेजने की अनुमति दें। चैनल टाइप किए जाते हैं, ताकि टाइप का चैनल हो chan T केवल प्रकार के संदेशों को स्थानांतरित करने के लिए उपयोग किया जा सकता है T. उन पर काम करने के लिए विशेष सिंटैक्स का उपयोग किया जाता है; <-ch एक अभिव्यक्ति है जो निष्पादन गोरोइन को तब तक अवरुद्ध करने का कारण बनती है जब तक चैनल पर कोई मान नहीं आता है ch, जबकि ch <- x मान भेजता है x (संभवतः तब तक ब्लॉक करना जब तक कि कोई अन्य गोरोटीन मूल्य प्राप्त नहीं कर लेता)। अंतर्निर्मित switch-पसंद select बयान का उपयोग कई चैनलों पर गैर-अवरुद्ध संचार को लागू करने के लिए किया जा सकता है; उदाहरण के लिए #Concurrencyexample देखें। गो के पास एक मेमोरी मॉडल है जो बताता है कि डेटा को सुरक्षित रूप से साझा करने के लिए goroutines को चैनल या अन्य संचालन का उपयोग कैसे करना चाहिए। चैनल सेट का अस्तित्व अभिनेता मॉडल-शैली की समवर्ती भाषाओं जैसे एरलांग से अलग है, जहां संदेश सीधे अभिनेताओं (गोरोइन के अनुरूप) को संबोधित किए जाते हैं। अभिनेता शैली को गोरोइन और चैनलों के बीच एक-से-एक पत्राचार बनाए रखने के द्वारा गो में अनुकरण किया जा सकता है, लेकिन भाषा कई चैनलों को भेजने और प्राप्त करने के लिए एक चैनल या एक गोरोइन को साझा करने के लिए कई गोरोइन की अनुमति देती है। इन उपकरणों से वर्कर पूल, पाइपलाइन (जिसमें, कहते हैं, फ़ाइल को डिकम्प्रेस किया जाता है और इसे डाउनलोड करते समय पार्स किया जाता है), टाइमआउट के साथ पृष्ठभूमि कॉल, सेवाओं के एक सेट के फैन-आउट समानांतर कॉल, और अन्य जैसे समवर्ती निर्माण कर सकते हैं। चैनलों ने इंटरप्रोसेस संचार की सामान्य धारणा से आगे उपयोग पाया है, जैसे पुनर्नवीनीकरण बफ़र्स की एक समवर्ती-सुरक्षित सूची के रूप में सेवा करना, कोरटाइन लागू करना (जिसने गोरोटीन नाम को प्रेरित करने में मदद की), और इटरेटर्स को लागू करना। गो (चैनल (प्रोग्रामिंग) और वैकल्पिक चैनल इनपुट) की समवर्ती-संबंधित संरचनात्मक परंपराएं सी. ए. आर. होरे | टोनी होरे के संचार अनुक्रमिक प्रक्रियाओं के मॉडल से ली गई हैं। ओकाम (प्रोग्रामिंग भाषा) या लिंबो (प्रोग्रामिंग भाषा) (एक भाषा जिस पर गो सह-डिजाइनर रोब पाइक ने काम किया) जैसी पिछली समवर्ती प्रोग्रामिंग भाषाओं के विपरीत, गो सुरक्षित या सत्यापन योग्य समवर्तीता की कोई अंतर्निहित धारणा प्रदान नहीं करता है। जबकि संचार-प्रक्रिया मॉडल को गो में पसंद किया जाता है, यह केवल एक ही नहीं है: एक कार्यक्रम में सभी goroutines एक ही पता स्थान साझा करते हैं। इसका मतलब यह है कि परिवर्तनीय वस्तुओं और पॉइंटर्स को गोरोइन के बीच साझा किया जा सकता है; देखना, नीचे।

समानांतर प्रोग्रामिंग के लिए उपयुक्तता
हालांकि गो की समवर्ती विशेषताएं मुख्य रूप से समांतर कंप्यूटिंग पर लक्षित नहीं हैं, उनका उपयोग साझा साझा स्मृति वास्तुकला| साझा-मेमोरी मल्टीप्रोसेसिंग | मल्टी-प्रोसेसर मशीनों को प्रोग्राम करने के लिए किया जा सकता है। इस दृष्टिकोण की प्रभावशीलता में विभिन्न अध्ययन किए गए हैं। इनमें से एक अध्ययन ने एक अनुभवी प्रोग्रामर द्वारा लिखे गए कार्यक्रमों के आकार (कोड की पंक्तियों में) और गति की तुलना की, जो भाषा से परिचित नहीं थे और एक गो विशेषज्ञ (Google की विकास टीम से) द्वारा इन कार्यक्रमों में सुधार, चैपल (प्रोग्रामिंग) के लिए ऐसा ही कर रहे थे। भाषा), पोशाक और इंटेल थ्रेडिंग बिल्डिंग ब्लॉक्स। अध्ययन में पाया गया कि गैर-विशेषज्ञ एक के साथ फोर्क-जॉइन मॉडल|डिवाइड-एंड-कॉनकॉर एल्गोरिदम लिखने के लिए प्रवृत्त थे। go कथन प्रति पुनरावर्तन, जबकि विशेषज्ञ ने प्रति प्रोसेसर एक गोरोटीन का उपयोग करके वितरण-कार्य-सिंक्रनाइज़ प्रोग्राम लिखा। विशेषज्ञ के कार्यक्रम आमतौर पर तेज होते थे, लेकिन लंबे भी।

सुरक्षा के लिए दौड़ की स्थिति का अभाव
संगामिति के लिए गो के दृष्टिकोण को संक्षेप में प्रस्तुत किया जा सकता है क्योंकि स्मृति साझा करके संवाद न करें; संचार करके स्मृति साझा करें। इस बात पर कोई प्रतिबंध नहीं है कि गो-रूटीन कैसे साझा किए गए डेटा तक पहुँचते हैं, जिससे दौड़ की स्थिति संभव हो जाती है। विशेष रूप से, जब तक कि कोई प्रोग्राम चैनलों या अन्य माध्यमों के माध्यम से स्पष्ट रूप से सिंक्रनाइज़ नहीं होता है, एक गो-दिनचर्या से लिखना आंशिक रूप से, पूरी तरह से, या किसी अन्य को बिल्कुल भी दिखाई नहीं दे सकता है, अक्सर लिखने के आदेश के बारे में कोई गारंटी नहीं होती है। इसके अलावा, गो की आंतरिक डेटा संरचनाएं जैसे इंटरफ़ेस मान, स्लाइस हेडर, हैश टेबल और स्ट्रिंग हेडर दौड़ की स्थिति से प्रतिरक्षित नहीं हैं, इसलिए मल्टीथ्रेडेड प्रोग्राम में टाइप और मेमोरी सुरक्षा का उल्लंघन किया जा सकता है जो बिना सिंक्रोनाइज़ेशन के उन प्रकारों के साझा उदाहरणों को संशोधित करते हैं। भाषा समर्थन के बजाय, सुरक्षित समवर्ती प्रोग्रामिंग सम्मेलनों पर निर्भर करती है; उदाहरण के लिए, चिस्नाल एलियासेस एकमात्र म्यूटेबल नामक एक मुहावरे की सिफारिश करता है, जिसका अर्थ है कि एक चैनल पर एक म्यूटेबल वैल्यू (या पॉइंटर) पास करना उसके रिसीवर को मूल्य पर स्वामित्व के हस्तांतरण का संकेत देता है।

बायनेरिज़
gc टूलचैन में लिंकर डिफ़ॉल्ट रूप से स्टैटिकली लिंक्ड बायनेरिज़ बनाता है; इसलिए सभी गो बायनेरिज़ में गो रनटाइम शामिल है।

चूक
गो जानबूझकर अन्य भाषाओं में कुछ सामान्य विशेषताओं को छोड़ देता है, जिसमें इनहेरिटेंस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)|(कार्यान्वयन) इनहेरिटेंस, अभिकथन (सॉफ़्टवेयर विकास), सूचक अंकगणित, प्रकार रूपांतरण#अंतर्निहित प्रकार के रूपांतरण, टैग न किए गए संघ, और टैग किए गए संघ। डिजाइनरों ने केवल उन सुविधाओं को जोड़ा, जिन पर तीनों सहमत थे। छोड़ी गई भाषा सुविधाओं में से, डिज़ाइनर स्पष्ट रूप से अभिकथन और पॉइंटर अंकगणित के खिलाफ तर्क देते हैं, जबकि गतिशील प्रेषण प्राप्त करने के लिए प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) के उपयोग को प्रोत्साहित करते हुए अधिक उपयोगी भाषा देने के रूप में टाइप इनहेरिटेंस को छोड़ने के विकल्प का बचाव करते हैं। और कोड का पुन: उपयोग करने के लिए वंशानुक्रम पर रचना। संरचना और प्रतिनिधिमंडल (प्रोग्रामिंग) वास्तव में काफी हद तक स्वचालित हैं struct एम्बेडिंग; शोधकर्ताओं Schmager et al के अनुसार, इस सुविधा में वंशानुक्रम की कई कमियाँ हैं: यह वस्तुओं के सार्वजनिक इंटरफ़ेस को प्रभावित करती है, यह ठीक-ठीक नहीं है (यानी, एम्बेडिंग पर कोई विधि-स्तरीय नियंत्रण नहीं है), एम्बेडेड ऑब्जेक्ट्स के तरीके नहीं हो सकते छिपा हुआ है, और यह स्थिर है, जिससे यह स्पष्ट नहीं होता है कि क्या प्रोग्रामर इसे इस हद तक उपयोग करेंगे कि अन्य भाषाओं के प्रोग्रामर इनहेरिटेंस का अत्यधिक उपयोग करने के लिए प्रतिष्ठित हैं। जटिलता के अनुपात में मूल्य देने वाले डिज़ाइन की कमी के कारण शुरू में गो में अपवाद हैंडलिंग को छोड़ दिया गया था। एक अपवाद जैसा panic/recover तंत्र जो सामान्य से बचता है  नियंत्रण संरचना प्रस्तावित की गई थी और 30 मार्च, 2010 के स्नैपशॉट में जारी किया गया। गो के लेखक इसे अप्राप्य त्रुटियों के लिए उपयोग करने की सलाह देते हैं जैसे कि पूरे प्रोग्राम या सर्वर अनुरोध को रोकना चाहिए, या एक पैकेज के भीतर स्टैक में त्रुटियों को प्रसारित करने के लिए शॉर्टकट के रूप में।  पैकेज सीमाओं के पार, गो में एक विहित त्रुटि प्रकार शामिल है, और इस प्रकार का उपयोग करके बहु-मूल्य रिटर्न मानक मुहावरे हैं।

स्टाइल
गो लेखकों ने गो कार्यक्रमों की शैली को प्रभावित करने के लिए पर्याप्त प्रयास किए:


 * इंडेंटेशन, रिक्ति, और कोड के अन्य सतह-स्तरीय विवरण स्वचालित रूप से मानकीकृत होते हैं  औजार। यह इंडेंटेशन के लिए टैब और संरेखण के लिए रिक्त स्थान का उपयोग करता है। संरेखण मानता है कि एक संपादक निश्चित-चौड़ाई वाले फ़ॉन्ट का उपयोग कर रहा है।   अतिरिक्त स्टाइल चेक स्वचालित रूप से करता है, लेकिन गो अनुरक्षकों द्वारा बहिष्कृत और संग्रहीत किया गया है।
 * गो के साथ वितरित उपकरण और पुस्तकालय एपीआई प्रलेखन जैसी चीजों के लिए मानक दृष्टिकोण सुझाते हैं, परिक्षण , इमारत , पैकेज प्रबंधन , और इसी तरह।
 * गो उन नियमों को लागू करता है जो अन्य भाषाओं में अनुशंसित हैं, उदाहरण के लिए चक्रीय निर्भरता, अप्रयुक्त चर पर प्रतिबंध लगाना या आयात, और अंतर्निहित प्रकार के रूपांतरण।
 * कुछ विशेषताओं का लोप (उदाहरण के लिए, कार्यात्मक-प्रोग्रामिंग शॉर्टकट जैसे  और जावा-शैली  /  ब्लॉक) एक विशेष स्पष्ट, ठोस और अनिवार्य प्रोग्रामिंग शैली को प्रोत्साहित करता है।
 * पहले दिन गो टीम ने गो मुहावरों का एक संग्रह प्रकाशित किया, और बाद में कोड समीक्षा टिप्पणियां भी एकत्र कीं, बाते, और आधिकारिक ब्लॉग पोस्ट गो स्टाइल और कोडिंग दर्शन सिखाने के लिए।

उपकरण
मुख्य गो वितरण में स्वचालन बनाएँ, इकाई का परीक्षण और स्थैतिक कार्यक्रम विश्लेषण कोड के लिए टूल शामिल हैं:


 * , जो स्वयं स्रोत फ़ाइलों में केवल जानकारी का उपयोग करके गो बायनेरिज़ बनाता है, कोई अलग मेकफ़ाइल नहीं
 * , इकाई परीक्षण और माइक्रोबेंचमार्क के लिए
 * , कोड स्वरूपण के लिए
 * , दूरस्थ पैकेजों को पुनः प्राप्त करने और स्थापित करने के लिए
 * कोड में संभावित त्रुटियों की तलाश में एक स्थिर विश्लेषक
 * , कोड बनाने और क्रियान्वित करने के लिए एक शॉर्टकट
 * , दस्तावेज़ प्रदर्शित करने या इसे HTTP के माध्यम से प्रस्तुत करने के लिए
 * , प्रकार-सुरक्षित तरीके से चरों, कार्यों आदि का नाम बदलने के लिए
 * , कोड जेनरेटर शुरू करने का एक मानक तरीका
 * , एक नया मॉड्यूल बनाने के लिए, निर्भरताएँ जोड़ना, निर्भरताएँ उन्नत करना, आदि।

इसमें प्रोफाइलिंग (कंप्यूटर प्रोग्रामिंग) और डिबगिंग समर्थन, रन टाइम (प्रोग्राम जीवनचक्र चरण) इंस्ट्रूमेंटेशन (उदाहरण के लिए, कचरा संग्रह (कंप्यूटर साइंस) पॉज़ को ट्रैक करने के लिए), और रेस कंडीशन टेस्टर भी शामिल है।

तृतीय-पक्ष टूल का एक पारिस्थितिकी तंत्र मानक वितरण में जोड़ता है, जैसे, जो कई पाठ संपादकों में कोड स्वत: पूर्णता को सक्षम करता है,  , जो स्वचालित रूप से आवश्यकतानुसार पैकेज आयात जोड़ता/हटाता है, और  , जो कोड का पता लगाता है जो अनजाने में त्रुटियों को अनदेखा कर सकता है।

हैलो वर्ल्ड
<वाक्यविन्यास प्रकाश लैंग = जाओ> मुख्य पैकेज

एफएमटी आयात करें

फंक मेन { fmt.Println (हैलो वर्ल्ड) } 

जहाँ fmt स्वरूपित इनपुट/आउटपुट के लिए पैकेज है I/O, C की C फ़ाइल इनपुट/आउटपुट के समान है।

समवर्ती
निम्नलिखित सरल कार्यक्रम एक अतुल्यकालिक कार्यक्रम को लागू करने के लिए गो के #Concurrency को प्रदर्शित करता है। यह दो हल्के धागे ( goroutines ) लॉन्च करता है: एक उपयोगकर्ता द्वारा कुछ पाठ टाइप करने की प्रतीक्षा करता है, जबकि दूसरा टाइमआउट लागू करता है। select }} कथन मुख्य रूटीन को संदेश भेजने के लिए इनमें से किसी एक गोरोटीन का इंतजार करता है, और आने वाले पहले संदेश पर कार्य करता है (उदाहरण डेविड चिसनॉल की पुस्तक से लिया गया है)। <वाक्यविन्यास प्रकाश लैंग = जाओ> मुख्य पैकेज

आयात (    fmt     समय )

func रीडवर्ड (ch चान स्ट्रिंग) { fmt.Println (एक शब्द टाइप करें, फिर एंटर दबाएं।) वर शब्द स्ट्रिंग fmt.Scanf( %s, और शब्द) च <- शब्द }

फंक टाइमआउट (टी चान बूल) { समय। नींद (5 * समय। दूसरा) टी <- असत्य }

फंक मेन { टी: = बनाओ (चान बूल) गो टाइमआउट (टी)

ch := बनाना (चान स्ट्रिंग) पढ़ें शब्द (सीएच)

चुनना { मामला शब्द: = <-ch: fmt.Println (प्राप्त, शब्द) मामला <-टी: fmt.Println (समय समाप्त।) } } 

परीक्षण
परीक्षण पैकेज गो पैकेजों के स्वचालित परीक्षण के लिए सहायता प्रदान करता है। लक्ष्य समारोह उदाहरण:

<वाक्यविन्यास प्रकाश लैंग = जाओ> func ExtractUsername (ईमेल स्ट्रिंग) स्ट्रिंग { at := string.Index(ईमेल, @ ) वापसी ईमेल [: पर] } 

परीक्षण कोड (ध्यान दें कि ज़ोर कीवर्ड गो में गायब है; परीक्षण उसी पैकेज में _test.go में रहते हैं):

<वाक्यविन्यास प्रकाश लैंग = जाओ> आयात (    परिक्षण )

func TestExtractUsername(t *testing.T) { टी.रन (बिना डॉट, फंक (टी * परीक्षण। टी) { उपयोगकर्ता नाम := ExtractUsername( r@google.com ) अगर उपयोगकर्ता नाम! = आर { t.Fatalf (मिला: %v\n, उपयोगकर्ता नाम) } })

टी.रन (डॉट के साथ, फंक (टी * परीक्षण। टी) { उपयोगकर्ता नाम:= ExtractUsername(jonh.smith@example.com) अगर उपयोगकर्ता नाम! = जॉन स्मिथ { t.Fatalf (मिला: %v\n, उपयोगकर्ता नाम) } }) } 

समानांतर में परीक्षण चलाना संभव है।

वेब ऐप
नेट/एचटीटीपी पैकेज वेब एप्लिकेशन बनाने के लिए सहायता प्रदान करता है।

यह उदाहरण हैलो वर्ल्ड दिखाएगा! जब लोकलहोस्ट: 8080 का दौरा किया जाता है। <वाक्यविन्यास प्रकाश लैंग = जाओ> मुख्य पैकेज

आयात (    fmt     लकड़ी का लट्ठा     नेट/एचटीटीपी )

func helloFunc(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, हैलो वर्ल्ड!) }

फंक मेन { http.HandleFunc( /, helloFunc) log.Fatal(http.ListenAndServe( :8080, nil)) }



अनुप्रयोग
कुछ उल्लेखनीय खुला स्रोत सॉफ्टवेयर | गो में लिखे गए ओपन-सोर्स एप्लिकेशन में शामिल हैं: अन्य उल्लेखनीय कंपनियां और गो का उपयोग करने वाली साइटें (आमतौर पर अन्य भाषाओं के साथ, विशेष रूप से नहीं) में शामिल हैं:
 * कैडी (वेब ​​सर्वर), स्वचालित HTTPS क्षमता वाला एक खुला स्रोत HTTP/2 वेब सर्वर
 * कॉकरोचडीबी, एक खुला स्रोत, जीवित रहने योग्य, दृढ़ता से सुसंगत, स्केल-आउट SQL डेटाबेस
 * कॉन्सुल (सॉफ्टवेयर), डीएनएस-आधारित सेवा खोज के लिए एक सॉफ्टवेयर और वितरित की-वैल्यू स्टोरेज, सेगमेंटेशन और कॉन्फ़िगरेशन प्रदान करता है।
 * डॉकर (सॉफ्टवेयर), लिनक्स कंटेनरों को तैनात करने के लिए उपकरणों का एक सेट
 * एजएक्स फाउंड्री, लिनक्स फाउंडेशन द्वारा होस्ट किया गया एक विक्रेता-तटस्थ ओपन-सोर्स प्लेटफॉर्म, आईआईओटी एज कंप्यूटिंग के लिए एक सामान्य ढांचा प्रदान करता है।
 * ह्यूगो (सॉफ्टवेयर), एक स्थिर साइट जनरेटर
 * InfluxDB, विशेष रूप से उच्च उपलब्धता और उच्च प्रदर्शन आवश्यकताओं के साथ समय श्रृंखला डेटा को संभालने के लिए एक खुला स्रोत डेटाबेस
 * इंटरप्लेनेटरी फाइल सिस्टम, एक कंटेंट-एड्रेसेबल, पीयर-टू-पीयर हाइपरमीडिया प्रोटोकॉल
 * जूजू (सॉफ्टवेयर), कैनोनिकल लिमिटेड द्वारा एक सर्विस ऑर्केस्ट्रेशन टूल, उबंटू (ऑपरेटिंग सिस्टम) लिनक्स के पैकर्स
 * कुबेरनेट्स कंटेनर प्रबंधन प्रणाली
 * एलएनडी, Bitcoin लाइटनिंग नेटवर्क का कार्यान्वयन
 * सबसे महत्वपूर्ण, एक टीमचैट सिस्टम
 * NATS मैसेजिंग, एक ओपन-सोर्स मैसेजिंग सिस्टम जिसमें प्रदर्शन, मापनीयता और उपयोग में आसानी के मुख्य डिजाइन सिद्धांत शामिल हैं
 * OpenShift, Red Hat की सेवा के रूप में एक क्लाउड कम्प्यूटिंग प्लेटफॉर्म
 * प्रोमेथियस_ (सॉफ्टवेयर), एक ओपन-सोर्स मॉनिटरिंग और अलर्टिंग टूल।
 * Rclone, क्लाउड स्टोरेज और अन्य उच्च विलंबता सेवाओं पर फ़ाइलों को प्रबंधित करने के लिए एक कमांड लाइन प्रोग्राम
 * स्नैपी (पैकेज मैनेजर), कैननिकल द्वारा विकसित उबंटू टच के लिए एक पैकेज मैनेजर
 * सिंकिंग, एक ओपन-सोर्स फ़ाइल सिंक्रोनाइज़ेशन क्लाइंट/सर्वर एप्लिकेशन
 * टेराफॉर्म (सॉफ्टवेयर), एक ओपन-सोर्स, हशीकॉर्प से कई क्लाउड कंप्यूटिंग इंफ्रास्ट्रक्चर प्रोविजनिंग टूल
 * TiDB, एक ओपन-सोर्स, PingCAP से MySQL प्रोटोकॉल के साथ संगत वितरित HTAP डेटाबेस
 * रफ़्तार, एक खुला-स्रोत, ने MySQL संगत डेटाबेस को YouTube से वितरित किया जिसे अब क्लाउड नेटिव कंप्यूटिंग फाउंडेशन द्वारा होस्ट किया जाता है
 * artil, वेब सुरक्षा मूल्यांकन उपकरण

यह भी देखें 20wikibase%3Label% 20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22%5BAUTO_LANGUAGE%5D%2Cen%22.%20%7D%0A%20%20%3Finstance_of%20wdt%3AP31%2Fwdt%3AP279%2a %20wd%3AQ341 %0A%20%20OPTIONAL%20%7B%20%3Finstance_of%20wdt%3AP856%20%3Official_website%20%7D%0A%20%20%3Finstance_of%20wdt%3AP277%20wd%3AQ37227.%0A% विकिडाटा से 7डी संबंधित प्रश्न]
 * Cacoo (सॉफ़्टवेयर), Go और gRPC का उपयोग करके उपयोगकर्ता डैशबोर्ड पृष्ठ और माइक्रोसर्विस के उनके प्रतिपादन के लिए
 * चांगो (कंपनी), एक प्रोग्रामैटिक विज्ञापन कंपनी अपने रीयल-टाइम बिडिंग सिस्टम में गो का उपयोग करती है
 * क्लाउड फाउंड्री, एक सेवा के रूप में एक मंच
 * बादल भड़कना, उनके डेल्टा-कोडिंग प्रॉक्सी रेलगन के लिए, उनकी वितरित डीएनएस सेवा के साथ-साथ क्रिप्टोग्राफी, लॉगिंग, स्ट्रीम प्रोसेसिंग और एसपीडीवाई साइटों तक पहुँचने के लिए उपकरण
 * कंटेनर लिनक्स (पूर्व में कोरोस), एक लिनक्स-आधारित ऑपरेटिंग सिस्टम जो डॉकर (सॉफ्टवेयर) कंटेनरों का उपयोग करता है और आरकेटी (सॉफ्टवेयर) कंटेनर
 * काउचबेस सर्वर के भीतर काउचबेस, क्वेरी और इंडेक्सिंग सेवाएं
 * ड्रॉपबॉक्स (सेवा), जिन्होंने अपने कुछ महत्वपूर्ण घटकों को पायथन से गो में स्थानांतरित कर दिया
 * Ethereum, ईथर क्रिप्टोक्यूरेंसी के लिए एथेरियम वर्चुअल मशीन ब्लॉकचेन का गो-एथेरियम कार्यान्वयन
 * GitLab, एक वेब-आधारित DevOps जीवनचक्र उपकरण जो Git-Repository (संस्करण नियंत्रण), सप्ताह, ट्रैकिंग प्रणाली जारी करें प्रदान करता है। समस्या-ट्रैकिंग, निरंतर एकीकरण, निरंतर परिनियोजन पाइपलाइन सुविधाएँ
 * Google, कई परियोजनाओं के लिए, विशेष रूप से डाउनलोड सर्वर dl.google.com सहित
 * से 6, डोज़र के लिए, एक लॉक सेवा
 * हाइपरलेगर फैब्रिक, एक खुला स्रोत, उद्यम-केंद्रित वितरित खाता-बही परियोजना
 * MongoDB, MongoDB उदाहरणों को प्रशासित करने के लिए उपकरण
 * NetFlix, उनके सर्वर आर्किटेक्चर के दो भागों के लिए
 * Nutanix, अपने Enterprise Cloud OS में विभिन्न प्रकार की सूक्ष्म सेवाओं के लिए
 * Plug.dj, एक इंटरैक्टिव ऑनलाइन सोशल म्यूजिक स्ट्रीमिंग वेबसाइट
 * SendGrid, एक बोल्डर, कोलोराडो स्थित लेन-देन संबंधी ईमेल वितरण और प्रबंधन सेवा।
 * SoundCloud, दर्जनों प्रणालियों के लिए
 * ब्याह (मंच), उनके ऑनलाइन संगीत सहयोग मंच के पूरे बैकएंड (एपीआई और पार्सर्स) के लिए
 * विचार काम करता है, निरंतर वितरण और त्वरित संदेशों के लिए कुछ उपकरण और अनुप्रयोग (CoyIM)
 * चिकोटी (सेवा), उनके आईआरसी-आधारित चैट सिस्टम के लिए (पायथन से माइग्रेट)
 * उबेर, जियो-फेंस-आधारित प्रश्नों की उच्च मात्रा को संभालने के लिए

रिसेप्शन
इंटरफ़ेस सिस्टम, और विरासत की जानबूझकर चूक, मिशेल सिमियोनाटो द्वारा प्रशंसा की गई, जिन्होंने इन विशेषताओं की मानक एमएल के साथ तुलना की, इसे शर्म की बात कहा कि कोई भी लोकप्रिय भाषा [इस] विशेष मार्ग का अनुसरण नहीं करती है। इंजन यार्ड में डेव एस्टेल्स ने 2009 में लिखा: "Go is extremely easy to dive into. There are a minimal number of fundamental language concepts and the syntax is clean and designed to be clear and unambiguous.

Go is still experimental and still a little rough around the edges." TIOBE प्रोग्रामिंग कम्युनिटी इंडेक्स द्वारा अपने पहले वर्ष, 2009 में गो को प्रोग्रामिंग लैंग्वेज ऑफ द ईयर नामित किया गया था, उस वर्ष किसी भी अन्य भाषा की तुलना में लोकप्रियता में 12 महीने की बड़ी वृद्धि (नवंबर में इसकी शुरुआत के बाद केवल 2 महीने में) होने के कारण, और जनवरी 2010 तक 13वें स्थान पर पहुंच गया, पास्कल (प्रोग्रामिंग भाषा) जैसी स्थापित भाषाओं को पार करना। जून 2015 तक, इसकी रैंकिंग सूचकांक में 50वें से नीचे गिर गई थी, इसे COBOL और फोरट्रान से नीचे रखा। लेकिन जनवरी 2017 तक, इसकी रैंकिंग 13वें स्थान पर पहुंच गई थी, जो लोकप्रियता और गोद लेने में महत्वपूर्ण वृद्धि का संकेत देती है। गो को वर्ष 2016 की टीआईओबीई प्रोग्रामिंग लैंग्वेज से सम्मानित किया गया।

ब्रूस एकेल ने कहा है: "The complexity of C++ (even more complexity has been added in the new C++), and the resulting impact on productivity, is no longer justified. All the hoops that the C++ programmer had to jump through in order to use a C-compatible language make no sense anymore -- they're just a waste of time and effort. Go makes much more sense for the class of problems that C++ was originally intended to solve." भाषा और उसके 2011 का मूल्यांकन gc सी++ (जीएनयू कंपाइलर कलेक्शन), जावा और स्काला (प्रोग्रामिंग भाषा) की तुलना में एक गूगल इंजीनियर द्वारा कार्यान्वयन पाया गया:

"Go offers interesting language features, which also allow for a concise and standardized notation. The compilers for this language are still immature, which reflects in both performance and binary sizes." मूल्यांकन को गो डेवलपमेंट टीम से खंडन मिला। इयान लांस टेलर, जिन्होंने हंड्ट के पेपर के लिए गो कोड में सुधार किया था, को अपने कोड को प्रकाशित करने के इरादे के बारे में पता नहीं था, और कहते हैं कि उनका संस्करण कभी भी मुहावरेदार या कुशल गो का उदाहरण नहीं था; रसेल कॉक्स ने तब गो कोड, साथ ही सी ++ कोड को अनुकूलित किया, और सी ++ की तुलना में थोड़ी तेजी से चलने के लिए गो कोड प्राप्त किया और पेपर में कोड की तुलना में तीव्रता के क्रम से अधिक।

नामकरण विवाद
10 नवंबर 2009 को, भाषा के सामान्य विमोचन का दिन, फ्रांसिस मैककेबे, गो के विकासकर्ता! (प्रोग्रामिंग भाषा)|जाओ! प्रोग्रामिंग लैंग्वेज (विस्मयादिबोधक बिंदु पर ध्यान दें), अपनी भाषा के साथ भ्रम को रोकने के लिए Google की भाषा के नाम में बदलाव का अनुरोध किया, जिसे विकसित करने में उन्होंने 10 साल लगाए थे। मैककेबे ने चिंता जताई कि 'बड़ा आदमी' उसके ऊपर भाप से लुढ़क जाएगा, और यह चिंता 120 से अधिक डेवलपर्स के साथ प्रतिध्वनित हुई, जिन्होंने Google के आधिकारिक मुद्दों पर टिप्पणी करते हुए कहा कि उन्हें नाम बदलना चाहिए, कुछ के साथ यहां तक ​​कि इस मुद्दे को कहना भी Google के आदर्श वाक्य: दुष्ट मत बनो के विपरीत है। 12 अक्टूबर 2010 को, Google डेवलपर Russ Cox (@rsc) द्वारा इस मुद्दे को कस्टम स्थिति दुर्भाग्यपूर्ण के साथ निम्नलिखित टिप्पणी के साथ बंद कर दिया गया था: गो नाम के कई कंप्यूटिंग उत्पाद और सेवाएं हैं। हमारी रिहाई के बाद के 11 महीनों में, दोनों भाषाओं में न्यूनतम भ्रम रहा है। 

आलोचना

 * बीजगणितीय प्रकारों की कमी के साथ संयुक्त गो के अशक्त सूचक से विफलताओं और बेस केस (रिकर्सन) को संभालने में कठिनाई होती है।
 * गो ओपनिंग ब्रेस को अपनी लाइन पर प्रदर्शित होने की अनुमति नहीं देता है, जो सभी गो प्रोग्रामर्स को एक ही ब्रेस स्टाइल का उपयोग करने के लिए मजबूर करता है।
 * गो मानक पुस्तकालय में फ़ाइल शब्दार्थ बहुत अधिक POSIX शब्दार्थ पर आधारित हैं, और वे Microsoft Windows के लिए अच्छी तरह से मैप नहीं करते हैं। ध्यान दें कि यह समस्या विशेष रूप से गो के लिए नहीं है, लेकिन अन्य प्रोग्रामिंग भाषाओं ने इसे अच्छी तरह से परिभाषित मानक पुस्तकालयों के माध्यम से हल किया है।
 * एक अध्ययन से पता चला है कि साझा स्मृति के साथ संदेश पासिंग के साथ समवर्ती बग बनाना उतना ही आसान है, कभी-कभी और भी।

यह भी देखें

 * मोटा सूचक
 * प्रोग्रामिंग भाषाओं की तुलना