गो (प्रोग्रामिंग लैंग्वेज)
![]() | |
Paradigm | Multi-paradigm: concurrent imperative, object-oriented[1][2] |
---|---|
द्वारा डिज़ाइन किया गया | Robert Griesemer Rob Pike Ken Thompson |
Developer | The Go Authors[3] |
पहली प्रस्तुति | November 10, 2009 |
Stable release | Script error: The module returned a nil value. It is supposed to return an export table.
/ Script error: The module returned a nil value. It is supposed to return an export table. |
फ़ाइल नाम एक्सटेंशनएस | .go |
गो एक स्थिर टाइपिंग, संकलित लैंग्वेज हाई लेवल प्रोग्रामिंग लैंग्वेज है। गूगल द्वारा डिज़ाइन की गई हाई लेवल प्रोग्रामिंग लैंग्वेज है[10] रॉबर्ट ग्रिसेमर (कंप्यूटर प्रोग्रामर), रोब पाइक और केन थॉम्पसन द्वारा[11] यह C (प्रोग्रामिंग लैंग्वेज) के समान सिंटैक्स (प्रोग्रामिंग लैंग्वेज) है, लेकिन स्मृति सुरक्षा, अपशिष्ट संग्रह (कंप्यूटर साइंस), संरचनात्मक प्रकार प्रणाली,[5]और अनुक्रमिक प्रक्रियाओं-शैली कॉन्करेन्सी (कंप्यूटर विज्ञान) का संचार करना इसका विशेष कार्य है।[12] इसके पूर्व डोमेन नाम golang.org
के कारण इसे अधिकांशतः Golang कहा जाता है, लेकिन इसका उचित नाम गो है।[13] इसके दो प्रमुख कार्यान्वयन हैं:
- गूगल की स्व-होस्टिंग (संकलक) सेल्फ-होस्टिंग[14] जीसी संकलक टूलचेन, कई ऑपरेटिंग सिस्टम और वेबअसेंबली को लक्षित करता है।[15]
- गोफ़्रंटएंड, libgo लाइब्रेरी के साथ अन्य कंपाइलर्स के लिए एक दृश्यपटल जीएनयू संकलक संग्रह के साथ संयोजन जीसीसीजीओ है;[16] एलएलवीएम के साथ एक अन्य संयोजन गोलवम है।[17][lower-alpha 1]
एक तृतीय-पक्ष सोर्स-टू-सोर्स संकलक, गोफरजेएस,[19] कंपाइल फ्रंट-एंड वेब विकास के लिए जावास्क्रिप्ट पर जा सकते हैं।
इतिहास
गो को 2007 में मल्टी-कोर प्रोसेसर, संगणक संजाल कंप्यूटर और बड़े कोडबेस के युग में प्रोग्रामिंग उत्पादकता में सुधार के लिए डिज़ाइन किया गया था।[20] डिज़ाइनर गूगल में उपयोग में आने वाली अन्य लैंग्वेज की आलोचना को संबोधित करना चाहते थे, साथ ही उनकी उपयोगी विशेषताओं को भी बनाए रखना चाहते थे।[21]
- स्टेटिक टाइपिंग और रन टाइम (प्रोग्राम जीवनचक्र चरण), रन-टाइम दक्षता (जैसे सी (प्रोग्रामिंग लैंग्वेज))
- पठनीयता और उपयोगिता (जैसे पायथन (प्रोग्रामिंग लैंग्वेज) या जावास्क्रिप्ट)[22]
- उच्च प्रदर्शन कंप्यूटर नेटवर्क और मल्टी नेटवर्क
इसके डिजाइनर ने मुख्य रूप से C++ की आलोचना की उनकी साझा अभिव्यक्तियों से प्रेरित थे।[23][24][25] गो की सार्वजनिक रूप से नवंबर 2009 में घोषणा की गई थी,[26] और संस्करण 1.0 मार्च 2012 में जारी किया गया था।[27][28] गूगल में उत्पादन में गो का व्यापक रूप से उपयोग किया जाता है[29] और कई अन्य संगठनों और ओपन-सोर्स प्रोजेक्ट्स में मुख्य रूप से इसका प्रचार प्रसार किया गया।
ब्रांडिंग और स्टाइल

लैंग्वेज के ओपन सोर्स लॉन्च के लिए 2009 में गोफर शुभंकर प्रस्तुत किया गया था। C से उदाहरण के रूप में लिया गया डिज़ाइन 2000 डब्ल्यूएफएमयू पदोन्नति में सहायक के रूप में प्रमाणित हुआ। [30]
नवंबर 2016 में, गो एंड गो मोनो फोंट टाइप डिज़ाइनर चार्ल्स बिगेलो (टाइप डिज़ाइनर) और क्रिस होम्स द्वारा विशेष रूप से गो प्रोजेक्ट द्वारा उपयोग के लिए जारी किए गए थे। गो एक मानवतावादी सैंस-सेरिफ़ है जो ल्यूसिडा ग्रांडे जैसा दिखता है, और गो में मोनो प्रयुक्त होते है। दोनों फॉन्ट डब्ल्यूजीएल4 कैरेक्टर सेट का पालन करते हैं और एक बड़ी एक्स-हाइट और अलग लेटरफॉर्म के साथ सुपाठ्य होने के लिए डिजाइन किए गए थे। गो और गो मोनो दोनों डीआईएन 1450 मानक का पालन करते हैं, जिसमें शून्य, लोअरकेस l
घटाया गया है, एक टेल और एक अपरकेस के साथ I
सेरिफ़ के साथ इसका प्रयोग किया गया।[31][32] अप्रैल 2018 में, मूल लोगो को पीछे की ओर स्ट्रीमलाइन के साथ दाहिनी ओर झुकी हुई स्टाइलिश गो से बदल दिया गया था। (गोफर शुभंकर वही रहा।[33])
जेनरिक
गो के प्रारम्भिक संस्करणों में सामान्य प्रोग्रामिंग के सपोर्ट की कमी ने काफी आलोचना की।[34] डिजाइनरों ने सामान्य प्रोग्रामिंग के लिए एक संकीर्णन व्यक्त किया और नोट किया कि अंतर्निहित कार्य वास्तव में टाइप-जेनेरिक थे, लेकिन उन्हें विशेष मामलों के रूप में माना जाता है; पाइक ने इसे एक कमजोरी कहा है जिसे किसी बिंदु पर बदला जा सकता है।[35] गूगल टीम ने जेनरिक के साथ प्रायोगिक गो प्रोग्रामिंग लैंग्वेज के लिए कम से कम एक संकलक बनाया, लेकिन इसे जारी नहीं किया।[36] अगस्त 2018 में, गो प्रमुख योगदानकर्ताओं ने सामान्य प्रोग्रामिंग और अपवाद हैंडलिंग के लिए ड्राफ्ट डिज़ाइन प्रकाशित किए और उपयोगकर्ताओं से प्रतिक्रिया प्रस्तुत करने के लिए कहा।[37][38] हालाँकि, त्रुटि प्रबंधन प्रस्ताव को अंततः छोड़ दिया गया था।[39] जून 2020 में, एक नया प्रारूप डिजाइन दस्तावेज़[40] प्रकाशित किया गया था जो सामान्य फंक्शनों और प्रकारों को घोषित करने के लिए गो में आवश्यक सिंटैक्स जोड़ देगा। एक कोड अनुवाद उपकरण,go2go, उपयोगकर्ताओं को ऑनलाइन गो प्लेग्राउंड के जेनरिक-सक्षम संस्करण के साथ नए सिंटैक्स को आज़माने की अनुमति देने के लिए प्रदान किया गया था।[41] जेनरिक को अंततः 1.18 संस्करण में गो में जोड़ा गया।[42]
वर्जनिंग
गो 1 अनुकूलता की गारंटी देता है,[43] लैंग्वेज विनिर्देश और मानक लाइब्रेरी के प्रमुख भागों के लिए वर्तमान गो 1.19 रिलीज़ तक के सभी Version[44] ने इस वादे को कायम रखा है।
प्रत्येक प्रमुख गो रिलीज़ तब तक समर्थित है जब तक दो नए प्रमुख रिलीज़ नहीं हो जाते।[45]
रिलीज़ | स्थिति | रिलीज़ की तारीख | रखरखाव समाप्त |
---|---|---|---|
go1 | अंततः जीवनकाल तक | 2012-03-28 | 2013-12-01 |
go1.1 | अंततः जीवनकाल तक | 2013-05-13 | 2014-06-18 |
go1.2 | अंततः जीवनकाल तक | 2013-12-01 | 2014-12-10 |
go1.3 | अंततः जीवनकाल तक | 2014-06-18 | 2015-08-19 |
go1.4 | अंततः जीवनकाल तक | 2014-12-10 | 2016-02-17 |
go1.5 | अंततः जीवनकाल तक | 2015-08-19 | 2016-08-15 |
go1.6 | अंततः जीवनकाल तक | 2016-02-17 | 2017-02-16 |
go1.7 | अंततः जीवनकाल तक | 2016-08-15 | 2017-08-24 |
go1.8 | अंततः जीवनकाल तक | 2017-02-16 | 2018-02-16 |
go1.9 | अंततः जीवनकाल तक | 2017-08-24 | 2018-08-24 |
go1.10 | अंततः जीवनकाल तक | 2018-02-16 | 2019-02-25 |
go1.11 | अंततः जीवनकाल तक | 2018-08-24 | 2019-09-03 |
go1.12 | अंततः जीवनकाल तक | 2019-02-25 | 2020-02-25 |
go1.13 | अंततः जीवनकाल तक | 2019-09-03 | 2020-08-11 |
go1.14 | अंततः जीवनकाल तक | 2020-02-25 | 2021-02-16 |
go1.15 | अंततः जीवनकाल तक | 2020-08-11 | 2021-08-16 |
go1.16 | अंततः जीवनकाल तक | 2021-02-16 | 2022-03-15 |
go1.17 | अंततः जीवनकाल तक | 2021-08-16 | 2022-08-02 |
go1.18 | अंततः जीवनकाल तक | 2022-03-15 | 2023-02-01 |
go1.19 | रखरखाव | 2022-08-02 | Q3 2023 |
go1.20 | वर्तमान | 2023-02-01 | Q1 2024 |
go1.21 | योजनाबद्ध | Q3 2023 | Q3 2024 |
Legend: Old version Older version, still maintained Latest version Future release |
डिजाइन
गो सी (प्रोग्रामिंग लैंग्वेज) से प्रभावित है (विशेष रूप से बेल लैब्स प्रोग्रामिंग लैंग्वेज (कंप्यूटिंग) से प्लान 9)[46][failed verification – see discussion]), लेकिन अधिक सहजता और सुरक्षा पर जोर देने के साथ प्रयुक्त होते हैं। यह होते हैं:
- गतिशील प्रोग्रामिंग लैंग्वेज में पैटर्न को अपनाने वाला एक सिंटैक्स और पर्यावरण अधिक सामान्य है।[47]
- वैकल्पिक संक्षिप्त चर घोषणा और प्रारंभिक प्रकार अनुमान के माध्यम से (
x := 0
के बजायint x = 0;
याvar x = 0;
) - तेज संकलन[48]
- वैकल्पिक संक्षिप्त चर घोषणा और प्रारंभिक प्रकार अनुमान के माध्यम से (
- दूरस्थ पैकेज प्रबंधन (
go get
)[49] और ऑनलाइन पैकेज प्रलेखन।[50] - विशेष समस्याओं के लिए विशिष्ट दृष्टिकोण।
- बिल्ट-इन कंकरेंसी प्रिमिटिव्स: हल्के वजन की प्रक्रिया (गोरोटीन्स), चैनल (प्रोग्रामिंग), और
select
स्टेटमेंट। - वर्चुअल इन्हेरिटेंस के स्थान पर एक प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) सिस्टम, और गैर-वर्चुअल इनहेरिटेंस के स्थान पर एम्बेडिंग टाइप करें।
- एक टूलचैन, जो डिफ़ॉल्ट रूप से, बाहरी गो निर्भरता के बिना स्थिर लाइब्रेरी नेटिव बायनेरिज़ बनाता है।
- लैंग्वेज विनिर्देश को एक प्रोग्रामर के दिमाग में रखने के लिए आंशिक रूप से लोप द्वारा पर्याप्त सरल रखने की इच्छा[51]।
सिंटेक्स
गो के सिंटैक्स में कोड को संक्षिप्त और पठनीय रखने के उद्देश्य से C (प्रोग्रामिंग लैंग्वेज) से परिवर्तन सम्मिलित हैं। एक संयुक्त घोषणा/प्रारंभिक ऑपरेटर प्रस्तुत किया गया था जो प्रोग्रामर को लिखने की अनुमति देता है i := 3
या s := "Hello, world!"
, उपयोग किए गए चर का प्रकार अनुमान दर्शाया गया है। यह C के विपरीत है int i = 3;
और const char *s = "Hello, world!";
. अर्धविराम अभी भी प्रमाणों को समाप्त करते हैं;[lower-alpha 2] लेकिन इसमें यह कथन निहित हैं जब एक पंक्ति का अंत होता है।[lower-alpha 3] तरीके कई मान परिवर्तित कर सकते हैं, और एक प्रतिवर्तित कर सकते हैं result, err
डबल परंपरागत तरीका है एक विधि अपने कॉलर को गो में एक त्रुटि इंगित करती है।[lower-alpha 4] नाम से संरचना मापदंडों को आरंभ करने और साहचर्य सरणी और ऐरे स्लाइसिंग को आरंभ करने के लिए गो विज्ञापन शाब्दिक सिंटैक्स C के तीन-स्टेटमेंटों के विकल्प के रूप में for
पाश, गो range
भाव सरणियों, स्लाइस, स्ट्रिंग्स, मैप्स और चैनलों पर संक्षिप्त पुनरावृत्ति की अनुमति देते हैं।[54]
प्रकार
गो में कई बिल्ट-इन प्रकार हैं, जिनमें संख्यात्मक वाले सम्मिलित हैं (byte, int64, float32, आदि), बूलियन डेटा प्रकार, और बाइट स्ट्रिंग्स (string). तार अपरिवर्तनीय हैं; बिल्ट-इन ऑपरेटर्स और कीवर्ड्स (फ़ंक्शंस के स्थान पर) संयोजन, तुलना और यूटीएफ-8 एन्कोडिंग/डिकोडिंग प्रदान करते हैं।[55] रिकॉर्ड (कंप्यूटर विज्ञान) के साथ struct कीवर्ड परिभाषित किया जा सकता है।[56] प्रत्येक प्रकार के लिए T और प्रत्येक गैर-ऋणात्मक पूर्णांक स्थिरांक n, एक सरणी डेटा प्रकार [n]T निरूपित किया गया है, अलग-अलग लंबाई के सरणियाँ इस प्रकार विभिन्न प्रकार की होती हैं। डायनेमिक सरणियाँ स्लाइस के रूप में उपलब्ध हैं, जिन्हें दर्शाया गया है []T किसी प्रकार के लिए T. इनकी लंबाई और क्षमता निर्दिष्ट होती है जब सरणी का विस्तार करने के लिए नई मेमोरी आवंटित करने की आवश्यकता होती है। कई स्लाइस उनकी अंतर्निहित स्मृति साझा कर सकते हैं।[35][57][58] पॉइंटर (कंप्यूटर प्रोग्रामिंग) सभी प्रकार के लिए उपलब्ध हैं, और पॉइंटर-टू-T प्रकार *T बताया गया है, संबोधन-ग्रहण और अप्रत्यक्ष & और * उपयोग करते हैं, ऑपरेटरों, सी के रूप में, या विधि कॉल या विशेषता एक्सेस सिंटैक्स के माध्यम से अंतर्निहित रूप से होता है।[59][60] कोई सूचक अंकगणित नहीं है,[lower-alpha 5] विशेष के माध्यम से छोड़कर unsafe.Pointer मानक लाइब्रेरी में टाइप करें।[61] एक डबल प्रकार के लिए K, V, प्ररूप map[K]V हैश तालिका मैपिंग प्रकार का प्रकार है, K कुंजी टाइप करने के लिए-V मान विशेष सिंटैक्स और बिल्ट-इन फ़ंक्शंस के साथ हैश टेबल लैंग्वेज में निर्मित होते हैं। chan T एक चैनल है जो समवर्ती के बीच T प्रकार के मान भेजने की अनुमति देता है।[62]
- इंटरफेस के लिए इसके सपोर्ट के अलावा, Go नाममात्र प्रकार प्रणाली नाममात्र प्रकार का सिस्टम है: type कीवर्ड का उपयोग एक नए नामित प्रकार को परिभाषित करने के लिए किया जा सकता है, जो अन्य नामित प्रकारों से अलग है जिनका समान लेआउट struct है (एक के मामले में), वही सदस्य उसी क्रम में) प्रकारों के बीच कुछ रूपांतरण (जैसे, विभिन्न पूर्णांक प्रकारों के बीच) पूर्व-परिभाषित होते हैं और एक नया प्रकार जोड़ने से अतिरिक्त रूपांतरण परिभाषित हो सकते हैं, लेकिन नामित प्रकारों के बीच रूपांतरणों को सदैव स्पष्ट रूप से लागू किया जाना चाहिए।[63] उदाहरण के लिए, द type 32-बिट अहस्ताक्षरित पूर्णांकों के आधार पर आईपीवी 4 एड्रेसों के लिए एक प्रकार को परिभाषित करने के लिए कीवर्ड का उपयोग किया जा सकता है:
type ipv4addr uint32
इस प्रकार की परिभाषा के साथ, ipv4addr(x) व्याख्या uint32 वैल्यू x एक आईपी एड्रेस के रूप में करता है। बस असाइन करना x प्रकार के एक चर के लिए ipv4addr प्रकार की त्रुटि है।[64] स्थिर भाव या तो टाइप किए गए या अनटाइप किए गए हो सकते हैं; टाइप किए गए चर को असाइन किए जाने पर उन्हें एक प्रकार दिया जाता है यदि वे जिस मान का प्रतिनिधित्व करते हैं वह संकलन-समय की जांच पास करता है।[65] सबरूटीन प्रकार इसके द्वारा इंगित किए जाते हैं, func कीवर्ड; वे शून्य या अधिक पैरामीटर (कंप्यूटर प्रोग्रामिंग) लेते हैं और प्रतिवर्तिती स्टेटमेंट शून्य या अधिक मान देते हैं, जो सभी टाइप किए जाते हैं। पैरामीटर और प्रतिवर्तिती मान एक फ़ंक्शन प्रकार निर्धारित करते हैं; इस प्रकार, func(string, int32) (int, error) फंक्शनों का प्रकार है जो a लेता है string और एक 32-बिट हस्ताक्षरित पूर्णांक, और एक हस्ताक्षरित पूर्णांक (डिफ़ॉल्ट चौड़ाई का) और अंतर्निर्मित इंटरफ़ेस प्रकार का मान error परिवर्तित करता है[66], किसी भी नामित प्रकार के साथ एक विधि (कंप्यूटर प्रोग्रामिंग) जुड़ा हुआ है। ऊपर दिए गए आईपी एड्रेस के उदाहरण को यह जाँचने के लिए एक विधि के साथ बढ़ाया जा सकता है कि क्या उसका मान एक ज्ञात मानक है:
// ZeroBroadcast reports whether addr is 255.255.255.255.
func (addr ipv4addr) ZeroBroadcast() bool {
return addr == 0xFFFFFFFF
}
नाममात्र टाइपिंग के कारण, यह विधि परिभाषा में एक विधि ipv4addr जोड़ती है, लेकिन uint32 चालू नहीं जबकि विधियों की विशेष परिभाषा और कॉल सिंटैक्स है, कोई विशिष्ट विधि प्रकार नहीं है।[67]
इंटरफ़ेस सिस्टम
गो दो सुविधाएँ प्रदान करता है जो वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग) को प्रतिस्थापित करती हैं।[citation needed] पहला एम्बेडिंग है, जिसे वस्तु रचना के एक स्वचालित रूप के रूप में देखा जा सकता है।[68] दूसरा इसका प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) है, जो रनटाइम बहुरूपता प्रदान करता है।[69]: 266 इंटरफेस प्रकार का एक वर्ग है और गो के अन्यथा नाममात्र प्रकार की प्रणाली में संरचनात्मक प्रकार की प्रणाली का एक सीमित रूप प्रदान करता है। एक वस्तु जो एक इंटरफ़ेस प्रकार की होती है, वह दूसरे प्रकार की भी होती है, जैसे कि C++ वस्तुएँ एक साथ आधार और व्युत्पन्न वर्ग की होती हैं। गो इंटरफेस को स्मॉलटाक प्रोग्रामिंग लैंग्वेज से प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) के बाद डिजाइन किया गया था।[70] गो इंटरफेस का वर्णन करते समय कई सोर्स बतख टाइपिंग शब्द का उपयोग करते हैं।[71][72] हालांकि डक टाइपिंग शब्द सटीक रूप से परिभाषित नहीं है और इसलिए गलत नहीं है, आमतौर पर इसका तात्पर्य यह है कि प्रकार के अनुरूपता को सांख्यिकीय रूप से जांचा नहीं जाता है। चूंकि गो इंटरफ़ेस के अनुरूप गो कंपाइलर द्वारा स्थिर रूप से जांच की जाती है (एक प्रकार का दावा करने के अलावा), गो लेखक स्ट्रक्चरल टाइपिंग शब्द को पसंद करते हैं।[73] इंटरफ़ेस प्रकार की परिभाषा नाम और प्रकार द्वारा आवश्यक विधियों को सूचीबद्ध करती है। टाइप टी का कोई भी ऑब्जेक्ट जिसके लिए इंटरफ़ेस टाइप I के सभी आवश्यक तरीकों से मेल खाने वाले फ़ंक्शन मौजूद हैं, टाइप I का एक ऑब्जेक्ट भी है। टाइप टी की परिभाषा को टाइप I की पहचान करने की आवश्यकता नहीं है (और नहीं कर सकती)। उदाहरण के लिए, यदि Shape, Square and Circle के रूप में परिभाषित किया गया है
import "math"
type Shape interface {
Area() float64
}
type Square struct { // Note: no "implements" declaration
side float64
}
func (sq Square) Area() float64 { return sq.side * sq.side }
type Circle struct { // No "implements" declaration here either
radius float64
}
func (c Circle) Area() float64 { return math.Pi * math.Pow(c.radius, 2) }
फिर दोनों ए Square और ए Circle परोक्ष रूप से ए हैं Shape और ए को सौंपा जा सकता है Shapeटाइप किया हुआ चर।[69]: 263–268 औपचारिक लैंग्वेज में, गो की इंटरफ़ेस प्रणाली नाममात्र प्रकार की सिस्टम टाइपिंग के स्थान पर संरचनात्मक प्रकार की प्रणाली प्रदान करती है। इंटरफेस एक संयुक्त इंटरफ़ेस बनाने के प्रभाव से अन्य इंटरफेस को एम्बेड कर सकते हैं जो एम्बेडेड इंटरफ़ेस को लागू करने वाले प्रकारों और नए परिभाषित इंटरफ़ेस को जोड़ने वाली किसी भी विधि से संतुष्ट है।[69]: 270 गो मानक लाइब्रेरी कई स्थानों पर सामान्यता प्रदान करने के लिए इंटरफेस का उपयोग करता है, जिसमें इनपुट / आउटपुट सिस्टम सम्मिलित है जो कि अवधारणाओं पर आधारित है। Reader और Writer.[69]: 282–283 इंटरफ़ेस में कॉलिंग विधियों के अलावा, गो इंटरफ़ेस मानों को रन-टाइम प्रकार की जाँच के साथ अन्य प्रकारों में परिवर्तित करने की अनुमति देता है। ऐसा करने के लिए लैंग्वेज का निर्माण प्रकार का दावा है,[74] जो एक संभावित प्रकार के खिलाफ जांच करता है:
var shp Shape = Square{5}
square, ok := shp.(Square) // Asserts Square type on shp, should work
if ok {
fmt.Printf("%#v\n", square)
} else {
fmt.Println("Can't print shape as Square")
}
और प्रकार स्विच,[75] जो कई प्रकार के विरुद्ध जाँच करता है:[citation needed]
func (sq Square) Diagonal() float64 { return sq.side * math.Sqrt2 }
func (c Circle) Diameter() float64 { return 2 * c.radius }
func LongestContainedLine(shp Shape) float64 {
switch v := shp.(type) {
case Square:
return v.Diagonal() // Or, with type assertion, shp.(Square).Diagonal()
case Circle:
return v.Diameter() // Or, with type assertion, shp.(Circle).Diameter()
default:
return 0 // In practice, this should be handled with errors
}
}
खाली इंटरफ़ेस interface{}
एक महत्वपूर्ण आधार मामला है क्योंकि यह किसी भी ठोस प्रकार की वस्तु को संदर्भित कर सकता है। यह के समान है Object जावा में क्लास (प्रोग्रामिंग लैंग्वेज) या सी शार्प (प्रोग्रामिंग लैंग्वेज) | सी और किसी भी प्रकार से संतुष्ट है, जिसमें बिल्ट-इन प्रकार int सम्मिलित हैं.[69]: 284 खाली इंटरफ़ेस का उपयोग करने वाला कोड संदर्भित ऑब्जेक्ट पर केवल विधियों (या अंतर्निर्मित ऑपरेटरों) को कॉल नहीं कर सकता है, लेकिन यह स्टोर कर सकता है interface{}
मूल्य, इसे एक प्रकार के दावे या प्रकार स्विच के माध्यम से अधिक उपयोगी प्रकार में बदलने का प्रयास करें, या इसे गो के साथ निरीक्षण करें reflect
पैकेट[76] क्योंकि interface{}
किसी भी मूल्य को संदर्भित कर सकता है, यह स्थिर टाइपिंग के प्रतिबंधों से बचने का एक सीमित तरीका है, जैसे void*
सी में लेकिन अतिरिक्त रन-टाइम टाइप चेक के साथ प्रयोग किया जाता है।[citation needed]
interface{}
e> प्रकार का उपयोग गो में किसी भी मनमाना स्कीमा के संरचित डेटा को मॉडल करने के लिए किया जा सकता है, जैसे कि JSON या YAML डेटा, इसे एक के रूप में प्रस्तुत करकेmap[string]interface{}
(खाली इंटरफ़ेस के लिए स्ट्रिंग का नक्शा)। यह पुनरावर्ती रूप से स्ट्रिंग कुंजियों और किसी भी प्रकार के मानों के साथ शब्दकोश के रूप में डेटा का वर्णन करता है।[77]
डेटा के लिए सूचक और रन-टाइम प्रकार की जानकारी के लिए एक दूसरे सूचक का उपयोग करके इंटरफ़ेस मान लागू किए जाते हैं।[78] गो में पॉइंटर्स का उपयोग करके लागू किए गए कुछ अन्य प्रकारों की तरह, इंटरफ़ेस मान हैं nil
अगर अप्रारंभीकृत।[79]
पैरामिट्रीकृत प्रकार का उपयोग कर सामान्य कोड
संस्करण 1.18 के बाद से, गो पैरामीटरयुक्त प्रकारों का उपयोग करके सामान्य कोड का सपोर्ट करता है।[80]
पैकेज सिस्टम
गो के पैकेज सिस्टम में, प्रत्येक पैकेज का एक पथ होता है (उदाहरण के लिए, "compress/bzआईपी2"
या "golang.org/x/net/html"
) और एक नाम (उदा., bzआईपी2
या html
). अन्य पैकेज की परिभाषा के सन्दर्भ सदैव दूसरे पैकेज के नाम के साथ शुरू होने चाहिए, और अन्य पैकेजों से केवल बड़े अक्षरों में नाम ही पहुँच योग्य हैं: io.Reader
सार्वजनिक है लेकिन bzआईपी2.reader
क्या नहीं है।[81] go get
ई> कमांड रिमोट रिपॉजिटरी में संग्रहीत पैकेजों को पुनः प्राप्त कर सकता है[82] और डेवलपर्स को मानक लाइब्रेरी या अन्य बाहरी लाइब्रेरीों में भविष्य के परिवर्धन के साथ नाम टकराव की संभावना को कम करने के लिए एक सोर्स रिपॉजिटरी (जैसे example.com/user_name/package_name) के अनुरूप आधार पथ के अंदर पैकेज विकसित करने के लिए प्रोत्साहित किया जाता है।[83]
कॉन्करेन्सी: गो-रूटीन्स और चैनल
समसामयिक प्रोग्रामिंग लिखने के लिए गो लैंग्वेज में अंतर्निहित सुविधाएं हैं, साथ ही लाइब्रेरी सपोर्ट भी है। कॉन्करेन्सी न केवल सीपीयू समांतरता को संदर्भित करता है, बल्कि एसिंक्रोनस इनपुट/आउटपुट को भी संदर्भित करता है: डेटाबेस या नेटवर्क जैसे धीमे संचालन को चलाने देता है, जबकि प्रोग्राम अन्य काम करता है, जैसा कि घटना-आधारित सर्वरों में आम है।[84]
प्राथमिक कॉन्करेन्सी निर्माण गोरोइन है, एक प्रकार की हल्की-फुल्की प्रक्रिया। एक फ़ंक्शन कॉल जिसके साथ उपसर्ग किया गया है go
कीवर्ड एक नए गोरोइन में कार्य शुरू करता है। लैंग्वेज विनिर्देश यह निर्दिष्ट नहीं करता है कि गो-रूटीन्स को कैसे लागू किया जाना चाहिए, लेकिन वर्तमान कार्यान्वयन एक गो प्रक्रिया के गो-रूटीन्स को थ्रेड (कंप्यूटर साइंस) के एक छोटे सेट पर मल्टीप्लेक्स करता है। ऑपरेटिंग-सिस्टम थ्रेड्स, Erlang (प्रोग्रामिंग लैंग्वेज) में किए गए शेड्यूलिंग के समान।[85]: 10
जबकि अधिकांश शास्त्रीय कॉन्करेन्सी नियंत्रण संरचनाओं (म्युटेक्स ताले, आदि) की विशेषता वाला एक मानक लाइब्रेरी पैकेज उपलब्ध है,[85]: 151–152 मुहावरेदार समवर्ती कार्यक्रम इसके स्थान पर चैनलों को पसंद करते हैं, जो संदेश गोरोइन के बीच से गुजरते हैं।[86] वैकल्पिक बफ़र संदेशों को फ़ीफो (कंप्यूटिंग और इलेक्ट्रॉनिक्स) क्रम में संग्रहीत करते हैं[87]: 43 और उनके संदेश प्राप्त होने से पहले गो-रूटीन्स को भेजने की अनुमति दें।[citation needed]
चैनल टाइप किए जाते हैं, ताकि टाइप का चैनल हो chan T केवल प्रकार के संदेशों को स्थानांतरित करने के लिए उपयोग किया जा सकता है T. उन पर काम करने के लिए विशेष सिंटैक्स का उपयोग किया जाता है; <-ch एक अभिव्यक्ति है जो निष्पादन गोरोइन को तब तक अवरुद्ध करने का कारण बनती है जब तक चैनल पर कोई मान नहीं आता है ch, जबकि ch <- x मान भेजता है x (संभवतः तब तक ब्लॉक करना जब तक कि कोई अन्य गोरोटीन मूल्य प्राप्त नहीं कर लेता)। अंतर्निर्मित switch-पसंद select बयान का उपयोग कई चैनलों पर गैर-अवरुद्ध संचार को लागू करने के लिए किया जा सकता है; उदाहरण के लिए #समवर्तीexample देखें। गो के पास एक मेमोरी मॉडल है जो बताता है कि डेटा को सुरक्षित रूप से साझा करने के लिए गो-रूटीन्स को चैनल या अन्य संचालन का उपयोग कैसे करना चाहिए।[88]
चैनल सेट का अस्तित्व अभिनेता मॉडल-शैली की समवर्ती लैंग्वेज जैसे एरलांग से अलग है, जहां संदेश सीधे अभिनेताओं (गोरोइन के अनुरूप) को संबोधित किए जाते हैं। अभिनेता शैली को गोरोइन और चैनलों के बीच एक-से-एक पत्राचार बनाए रखने के द्वारा गो में अनुकरण किया जा सकता है, लेकिन लैंग्वेज कई चैनलों को भेजने और प्राप्त करने के लिए एक चैनल या एक गोरोइन को साझा करने के लिए कई गोरोइन की अनुमति देती है।[85]: 147
इन उपकरणों से वर्कर पूल, पाइपलाइन (जिसमें, कहते हैं, फ़ाइल को डिकम्प्रेस किया जाता है और इसे डाउनलोड करते समय पार्स किया जाता है), टाइमआउट के साथ पृष्ठभूमि कॉल, सेवाओं के एक सेट के फैन-आउट समानांतर कॉल, और अन्य जैसे समवर्ती निर्माण कर सकते हैं।[89] चैनलों ने इंटरप्रोसेस संचार की सामान्य धारणा से आगे उपयोग पाया है, जैसे पुनर्नवीनीकरण बफ़र्स की एक समवर्ती-सुरक्षित सूची के रूप में सेवा करना,[90] कोरटाइन लागू करना (जिसने गोरोटीन नाम को प्रेरित करने में मदद की),[91] और इटरेटर्स को लागू करना।[92]
गो (चैनल (प्रोग्रामिंग) और वैकल्पिक चैनल इनपुट) की समवर्ती-संबंधित संरचनात्मक परंपराएं सी. ए. आर. होरे | टोनी होरे के संचार अनुक्रमिक प्रक्रियाओं के मॉडल से ली गई हैं। ओकाम (प्रोग्रामिंग लैंग्वेज) या लिंबो (प्रोग्रामिंग लैंग्वेज) (एक लैंग्वेज जिस पर गो सह-डिजाइनर रोब पाइक ने काम किया) जैसी पिछली समवर्ती प्रोग्रामिंग लैंग्वेज के विपरीत,[93] गो सुरक्षित या सत्यापन योग्य समवर्तीता की कोई अंतर्निहित धारणा प्रदान नहीं करता है।[94] जबकि संचार-प्रक्रिया मॉडल को गो में पसंद किया जाता है, यह केवल एक ही नहीं है: एक कार्यक्रम में सभी गो-रूटीन्स एक ही पता स्थान साझा करते हैं। इसका मतलब यह है कि परिवर्तनीय वस्तुओं और पॉइंटर्स को गोरोइन के बीच साझा किया जा सकता है; देखना § Lack of race condition safety, नीचे।
समानांतर प्रोग्रामिंग के लिए उपयुक्तता
हालांकि गो की समवर्ती विशेषताएं मुख्य रूप से समांतर कंप्यूटिंग पर लक्षित नहीं हैं,[84] उनका उपयोग साझा साझा स्मृति वास्तुकला| साझा-मेमोरी मल्टीप्रोसेसिंग | मल्टी-प्रोसेसर मशीनों को प्रोग्राम करने के लिए किया जा सकता है। इस दृष्टिकोण की प्रभावशीलता में विभिन्न अध्ययन किए गए हैं।[95] इनमें से एक अध्ययन ने एक अनुभवी प्रोग्रामर द्वारा लिखे गए कार्यक्रमों के आकार (कोड की पंक्तियों में) और गति की तुलना की, जो लैंग्वेज से परिचित नहीं थे और एक गो विशेषज्ञ (गूगल की विकास टीम से) द्वारा इन कार्यक्रमों में सुधार, चैपल (प्रोग्रामिंग) के लिए ऐसा ही कर रहे थे। लैंग्वेज), पोशाक और इंटेल थ्रेडिंग बिल्डिंग ब्लॉक्स अध्ययन में पाया गया कि गैर-विशेषज्ञ एक के साथ फोर्क-जॉइन मॉडल|डिवाइड-एंड-कॉनकॉर एल्गोरिदम लिखने के लिए प्रवृत्त थे। go स्टेटमेंट प्रति पुनरावर्तन, जबकि विशेषज्ञ ने प्रति प्रोसेसर एक गोरोटीन का उपयोग करके वितरण-कार्य-सिंक्रनाइज़ प्रोग्राम लिखा। विशेषज्ञ के कार्यक्रम आमतौर पर तेज होते थे, लेकिन लंबे भी।[96]
सुरक्षा के लिए दौड़ की स्थिति का अभाव
कॉन्करेन्सी के लिए गो के दृष्टिकोण को संक्षेप में प्रस्तुत किया जा सकता है क्योंकि स्मृति साझा करके संवाद न करें; संचार करके स्मृति साझा करें।[97] इस बात पर कोई प्रतिबंध नहीं है कि गो-रूटीन कैसे साझा किए गए डेटा तक पहुँचते हैं, जिससे दौड़ की स्थिति संभव हो जाती है। विशेष रूप से, जब तक कि कोई प्रोग्राम चैनलों या अन्य माध्यमों के माध्यम से स्पष्ट रूप से सिंक्रनाइज़ नहीं होता है, एक गो-दिनचर्या से लिखना आंशिक रूप से, पूरी तरह से, या किसी अन्य को बिल्कुल भी दिखाई नहीं दे सकता है, अधिकांशतः लिखने के आदेश के बारे में कोई गारंटी नहीं होती है।[94]इसके अलावा, गो की आंतरिक डेटा संरचनाएं जैसे इंटरफ़ेस मान, स्लाइस हेडर, हैश टेबल और स्ट्रिंग हेडर दौड़ की स्थिति से प्रतिरक्षित नहीं हैं, इसलिए मल्टीथ्रेडेड प्रोग्राम में टाइप और मेमोरी सुरक्षा का उल्लंघन किया जा सकता है जो बिना सिंक्रोनाइज़ेशन के उन प्रकारों के साझा उदाहरणों को संशोधित करते हैं।[98][99] लैंग्वेज सपोर्ट के स्थान पर, सुरक्षित समवर्ती प्रोग्रामिंग सम्मेलनों पर निर्भर करती है; उदाहरण के लिए, चिस्नाल एलियासेस एकमात्र म्यूटेबल नामक एक मुहावरे की सिफारिश करता है, जिसका अर्थ है कि एक चैनल पर एक म्यूटेबल वैल्यू (या पॉइंटर) पास करना उसके रिसीवर को मूल्य पर स्वामित्व के हस्तांतरण का संकेत देता है।[85]: 155
बायनेरिज़
gc टूलचैन में लिंकर डिफ़ॉल्ट रूप से स्टैटिकली लिंक्ड बायनेरिज़ बनाता है; इसलिए सभी गो बायनेरिज़ में गो रनटाइम सम्मिलित है।[100][101]
चूक
गो जानबूझकर अन्य लैंग्वेज में कुछ सामान्य विशेषताओं को छोड़ देता है, जिसमें इनहेरिटेंस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)|(कार्यान्वयन) इनहेरिटेंस, अभिस्टेटमेंट (सॉफ़्टवेयर विकास),[lower-alpha 6] सूचक अंकगणित,[lower-alpha 5] प्रकार रूपांतरण#अंतर्निहित प्रकार के रूपांतरण, टैग न किए गए संघ,[lower-alpha 7] और टैग किए गए संघ।[lower-alpha 8] डिजाइनरों ने केवल उन सुविधाओं को जोड़ा, जिन पर तीनों सहमत थे।[104]
छोड़ी गई लैंग्वेज सुविधाओं में से, डिज़ाइनर स्पष्ट रूप से अभिस्टेटमेंट और पॉइंटर अंकगणित के खिलाफ तर्क देते हैं, जबकि गतिशील प्रेषण प्राप्त करने के लिए प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) के उपयोग को प्रोत्साहित करते हुए अधिक उपयोगी लैंग्वेज देने के रूप में टाइप इनहेरिटेंस को छोड़ने के विकल्प का बचाव करते हैं।[lower-alpha 9] और कोड का पुन: उपयोग करने के लिए वंशानुक्रम पर रचना। संरचना और प्रतिनिधिमंडल (प्रोग्रामिंग) वास्तव में काफी हद तक स्वचालित हैं struct एम्बेडिंग; शोधकर्ताओं Schmager et al के अनुसार, इस सुविधा में वंशानुक्रम की कई कमियाँ हैं: यह वस्तुओं के सार्वजनिक इंटरफ़ेस को प्रभावित करती है, यह ठीक-ठीक नहीं है (यानी, एम्बेडिंग पर कोई विधि-स्तरीय नियंत्रण नहीं है), एम्बेडेड ऑब्जेक्ट्स के तरीके नहीं हो सकते छिपा हुआ है, और यह स्थिर है, जिससे यह स्पष्ट नहीं होता है कि क्या प्रोग्रामर इसे इस हद तक उपयोग करेंगे कि अन्य लैंग्वेज के प्रोग्रामर इनहेरिटेंस का अत्यधिक उपयोग करने के लिए प्रतिष्ठित हैं।[68]
जटिलता के अनुपात में मूल्य देने वाले डिज़ाइन की कमी के कारण शुरू में गो में अपवाद हैंडलिंग को छोड़ दिया गया था।[105] एक अपवाद जैसा panic/recover तंत्र जो सामान्य से बचता है try-catch
नियंत्रण संरचना प्रस्तावित की गई थी[106] और 30 मार्च, 2010 के स्नैपशॉट में जारी किया गया।[107] गो के लेखक इसे अप्राप्य त्रुटियों के लिए उपयोग करने की सलाह देते हैं जैसे कि पूरे प्रोग्राम या सर्वर अनुरोध को रोकना चाहिए, या एक पैकेज के भीतर स्टैक में त्रुटियों को प्रसारित करने के लिए शॉर्टकट के रूप में।[108][109] पैकेज सीमाओं के पार, गो में एक विहित त्रुटि प्रकार सम्मिलित है, और इस प्रकार का उपयोग करके बहु-मूल्य रिटर्न मानक मुहावरे हैं।[11]
स्टाइल
गो लेखकों ने गो कार्यक्रमों की शैली को प्रभावित करने के लिए पर्याप्त प्रयास किए:
- इंडेंटेशन, रिक्ति, और कोड के अन्य सतह-स्तरीय विवरण स्वचालित रूप से मानकीकृत होते हैं
gofmt
औजार। यह इंडेंटेशन के लिए टैब और संरेखण के लिए रिक्त स्थान का उपयोग करता है। संरेखण मानता है कि एक संपादक निश्चित-चौड़ाई वाले फ़ॉन्ट का उपयोग कर रहा है।[110]golint
अतिरिक्त स्टाइल चेक स्वचालित रूप से करता है, लेकिन गो अनुरक्षकों द्वारा बहिष्कृत और संग्रहीत किया गया है।[111] - गो के साथ वितरित उपकरण और लाइब्रेरी एपीआई प्रलेखन जैसी चीजों के लिए मानक दृष्टिकोण सुझाते हैं (
godoc
),[112] परिक्षण (go test
), इमारत (go build
), पैकेज प्रबंधन (go get
), और इसी तरह। - गो उन नियमों को लागू करता है जो अन्य लैंग्वेज में अनुशंसित हैं, उदाहरण के लिए चक्रीय निर्भरता, अप्रयुक्त चर पर प्रतिबंध लगाना[113] या आयात,[114] और अंतर्निहित प्रकार के रूपांतरण।
- कुछ विशेषताओं का लोप (उदाहरण के लिए, कार्यात्मक-प्रोग्रामिंग शॉर्टकट जैसे
map
और जावा-शैलीtry
/finally
ब्लॉक) एक विशेष स्पष्ट, ठोस और अनिवार्य प्रोग्रामिंग शैली को प्रोत्साहित करता है। - पहले दिन गो टीम ने गो मुहावरों का एक संग्रह प्रकाशित किया,[112]और बाद में कोड समीक्षा टिप्पणियां भी एकत्र कीं,[115] बाते,[116] और आधिकारिक ब्लॉग पोस्ट[117] गो स्टाइल और कोडिंग दर्शन सिखाने के लिए।
उपकरण
मुख्य गो वितरण में स्वचालन बनाएँ, इकाई का परीक्षण और स्थैतिक कार्यक्रम विश्लेषण कोड के लिए टूल सम्मिलित हैं:
go build
, जो स्वयं सोर्स फ़ाइलों में केवल जानकारी का उपयोग करके गो बायनेरिज़ बनाता है, कोई अलग मेकफ़ाइल नहींgo test
, इकाई परीक्षण और माइक्रोबेंचमार्क के लिएgo fmt
, कोड स्वरूपण के लिएgo install
, दूरस्थ पैकेजों को पुनः प्राप्त करने और स्थापित करने के लिएgo vet
कोड में संभावित त्रुटियों की तलाश में एक स्थिर विश्लेषकgo run
, कोड बनाने और क्रियान्वित करने के लिए एक शॉर्टकटgodoc
, दस्तावेज़ प्रदर्शित करने या इसे HTTP के माध्यम से प्रस्तुत करने के लिएgorename
, प्रकार-सुरक्षित तरीके से चरों, फंक्शनों आदि का नाम बदलने के लिएgo generate
, कोड जेनरेटर शुरू करने का एक मानक तरीकाgo mod
, एक नया मॉड्यूल बनाने के लिए, निर्भरताएँ जोड़ना, निर्भरताएँ उन्नत करना, आदि।
इसमें प्रोफाइलिंग (कंप्यूटर प्रोग्रामिंग) और डिबगिंग सपोर्ट, रन टाइम (प्रोग्राम जीवनचक्र चरण) इंस्ट्रूमेंटेशन (उदाहरण के लिए, अपशिष्ट संग्रह (कंप्यूटर साइंस) पॉज़ को ट्रैक करने के लिए), और रेस कंडीशन टेस्टर भी सम्मिलित है।
तृतीय-पक्ष टूल का एक पारिस्थितिकी तंत्र मानक वितरण में जोड़ता है, जैसे gocode
, जो कई पाठ संपादकों में कोड स्वत: पूर्णता को सक्षम करता है, goimports
, जो स्वचालित रूप से आवश्यकतानुसार पैकेज आयात जोड़ता/हटाता है, और errcheck
, जो कोड का पता लगाता है जो अनजाने में त्रुटियों को अनदेखा कर सकता है।
उदाहरण
हैलो वर्ल्ड
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
जहाँ fmt स्वरूपित इनपुट/आउटपुट के लिए इनपुट/आउटपुट पैकेज है, C की C फ़ाइल इनपुट/आउटपुट के समान है।[118]
समवर्ती
निम्नलिखित सरल कार्यक्रम एक अतुल्यकालिक कार्यक्रम को लागू करने के लिए गो के समवर्ती को प्रदर्शित करता है। यह दो हल्के धागे (गो-रूटीन्स) लॉन्च करता है: एक उपयोगकर्ता द्वारा कुछ पाठ टाइप करने की प्रतीक्षा करता है, जबकि दूसरा टाइमआउट लागू करता है। select }} स्टेटमेंट मुख्य रूटीन को संदेश भेजने के लिए इनमें से किसी एक गोरोटीन का इंतजार करता है, और आने वाले पहले संदेश पर कार्य करता है (उदाहरण डेविड चिसनॉल की पुस्तक से लिया गया है)।[85]: 152
package main
import (
"fmt"
"time"
)
func readword(ch chan string) {
fmt.Println("Type a word, then hit Enter.")
var word string
fmt.Scanf("%s", &word)
ch <- word
}
func timeout(t chan bool) {
time.Sleep(5 * time.Second)
t <- false
}
func main() {
t := make(chan bool)
go timeout(t)
ch := make(chan string)
go readword(ch)
select {
case word := <-ch:
fmt.Println("Received", word)
case <-t:
fmt.Println("Timeout.")
}
}
परीक्षण
परीक्षण पैकेज गो पैकेजों के स्वचालित परीक्षण के लिए सहायता प्रदान करता है।[119] लक्ष्य फंक्शन उदाहरण:
func ExtractUsername(email string) string {
at := strings.Index(email, "@")
return email[:at]
}
परीक्षण कोड (ध्यान दें कि ज़ोर कीवर्ड गो में अदृश्य है; परीक्षण उसी पैकेज में <filename>_test.go में रहते हैं):
import (
"testing"
)
func TestExtractUsername(t *testing.T) {
t.Run("withoutDot", func(t *testing.T) {
username := ExtractUsername("r@google.com")
if username != "r" {
t.Fatalf("Got: %v\n", username)
}
})
t.Run("withDot", func(t *testing.T) {
username := ExtractUsername("jonh.smith@example.com")
if username != "jonh.smith" {
t.Fatalf("Got: %v\n", username)
}
})
}
समानांतर में परीक्षण चलाना संभव है।
वेब ऐप
नेट/एचटीटीपी पैकेज वेब एप्लिकेशन बनाने के लिए सहायता प्रदान करता है।
यह उदाहरण हैलो वर्ल्ड दिखाएगा! जब लोकलहोस्ट: 8080 का दौरा किया जाता है।
package main
import (
"fmt"
"log"
"net/http"
)
func helloFunc(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello world!")
}
func main() {
http.HandleFunc("/", helloFunc)
log.Fatal(http.ListenAndServe(":8080", nil))
}
अनुप्रयोग
कुछ उल्लेखनीय ओपन सोर्स सॉफ्टवेयर | गो में लिखे गए ओपन-सोर्स एप्लिकेशन में सम्मिलित हैं:[120]
- कैडी (वेब सर्वर), स्वचालित HTTPS क्षमता वाला एक ओपन सोर्स HTTP/2 वेब सर्वर
- कॉकरोचडीबी, एक ओपन सोर्स, जीवित रहने योग्य, दृढ़ता से सुसंगत, स्केल-आउट SQL डेटाबेस
- कॉन्सुल (सॉफ्टवेयर), डीएनएस-आधारित सेवा खोज के लिए एक सॉफ्टवेयर और वितरित की-वैल्यू स्टोरेज, सेगमेंटेशन और कॉन्फ़िगरेशन प्रदान करता है।
- डॉकर (सॉफ्टवेयर), लिनक्स कंटेनरों को तैनात करने के लिए उपकरणों का एक सेट
- एजएक्स फाउंड्री, लिनक्स फाउंडेशन द्वारा होस्ट किया गया एक विक्रेता-तटस्थ ओपन-सोर्स प्लेटफॉर्म, आईआईओटी एज कंप्यूटिंग के लिए एक सामान्य ढांचा प्रदान करता है।[121]
- ह्यूगो (सॉफ्टवेयर), एक स्थिर साइट जनरेटर
- InfluxDB, विशेष रूप से उच्च उपलब्धता और उच्च प्रदर्शन आवश्यकताओं के साथ समय श्रृंखला डेटा को संभालने के लिए एक ओपन सोर्स डेटाबेस
- इंटरप्लेनेटरी फाइल सिस्टम, एक कंटेंट-एड्रेसेबल, पीयर-टू-पीयर हाइपरमीडिया प्रोटोकॉल[122]
- जूजू (सॉफ्टवेयर), कैनोनिकल लिमिटेड द्वारा एक सर्विस ऑर्केस्ट्रेशन टूल, उबंटू (ऑपरेटिंग सिस्टम) लिनक्स के पैकर्स
- कुबेरनेट्स कंटेनर प्रबंधन प्रणाली
- एलएनडी, Bitcoin लाइटनिंग नेटवर्क का कार्यान्वयन[123]
- सबसे महत्वपूर्ण, एक टीमचैट सिस्टम
- NATS मैसेजिंग, एक ओपन-सोर्स मैसेजिंग सिस्टम जिसमें प्रदर्शन, मापनीयता और उपयोग में आसानी के मुख्य डिजाइन सिद्धांत सम्मिलित हैं[124]
- OpenShift, Red Hat की सेवा के रूप में एक क्लाउड कम्प्यूटिंग प्लेटफॉर्म
- प्रोमेथियस_ (सॉफ्टवेयर), एक ओपन-सोर्स मॉनिटरिंग और अलर्टिंग टूल।
- Rclone, क्लाउड स्टोरेज और अन्य उच्च विलंबता सेवाओं पर फ़ाइलों को प्रबंधित करने के लिए एक कमांड लाइन प्रोग्राम
- स्नैपी (पैकेज मैनेजर), कैननिकल द्वारा विकसित उबंटू टच के लिए एक पैकेज मैनेजर
- सिंकिंग, एक ओपन-सोर्स फ़ाइल सिंक्रोनाइज़ेशन क्लाइंट/सर्वर एप्लिकेशन
- टेराफॉर्म (सॉफ्टवेयर), एक ओपन-सोर्स, हशीकॉर्प से कई क्लाउड कंप्यूटिंग इंफ्रास्ट्रक्चर प्रोविजनिंग टूल
- TiDB, एक ओपन-सोर्स, PingCAP से MySQL प्रोटोकॉल के साथ संगत वितरित HTAP डेटाबेस
- रफ़्तार, एक ओपन-सोर्स, ने MySQL संगत डेटाबेस को YouTube से वितरित किया जिसे अब क्लाउड नेटिव कंप्यूटिंग फाउंडेशन द्वारा होस्ट किया जाता है[125][126]
- artil, वेब सुरक्षा मूल्यांकन उपकरण[127]
अन्य उल्लेखनीय कंपनियां और गो का उपयोग करने वाली साइटें (आमतौर पर अन्य लैंग्वेज के साथ, विशेष रूप से नहीं) में सम्मिलित हैं:
- Cacoo (सॉफ़्टवेयर), Go और gRPC का उपयोग करके उपयोगकर्ता डैशबोर्ड पृष्ठ और माइक्रोसर्विस के उनके प्रतिपादन के लिए[128]
- चांगो (कंपनी), एक प्रोग्रामैटिक विज्ञापन कंपनी अपने रीयल-टाइम बिडिंग सिस्टम में गो का उपयोग करती है[129]
- क्लाउड फाउंड्री, एक सेवा के रूप में एक मंच[130]
- बादल भड़कना, उनके डेल्टा-कोडिंग प्रॉक्सी रेलगन के लिए, उनकी वितरित डीएनएस सेवा के साथ-साथ क्रिप्टोग्राफी, लॉगिंग, स्ट्रीम प्रोसेसिंग और एसपीडीवाई साइटों तक पहुँचने के लिए उपकरण[131][132]
- कंटेनर लिनक्स (पूर्व में कोरोस), एक लिनक्स-आधारित ऑपरेटिंग सिस्टम जो डॉकर (सॉफ्टवेयर) कंटेनरों का उपयोग करता है[133] और आरकेटी (सॉफ्टवेयर) कंटेनर
- काउचबेस सर्वर के भीतर काउचबेस, क्वेरी और इंडेक्सिंग सेवाएं[134]
- ड्रॉपबॉक्स (सेवा), जिन्होंने अपने कुछ महत्वपूर्ण घटकों को पायथन से गो में स्थानांतरित कर दिया[135]
- Ethereum, ईथर क्रिप्टोक्यूरेंसी के लिए एथेरियम वर्चुअल मशीन ब्लॉकचेन का गो-एथेरियम कार्यान्वयन[136]
- GitLab, एक वेब-आधारित DevOps जीवनचक्र उपकरण जो Git-Repository (संस्करण नियंत्रण), सप्ताह, ट्रैकिंग प्रणाली जारी करें प्रदान करता है। समस्या-ट्रैकिंग, निरंतर एकीकरण, निरंतर परिनियोजन पाइपलाइन सुविधाएँ[137]
- गूगल, कई परियोजनाओं के लिए, विशेष रूप से डाउनलोड सर्वर dl.गूगल.com सहित[138][139][140]
- से 6, डोज़र के लिए, एक लॉक सेवा[12]
- हाइपरलेगर फैब्रिक, एक ओपन सोर्स, उद्यम-केंद्रित वितरित खाता-बही परियोजना
- MongoDB, MongoDB उदाहरणों को प्रशासित करने के लिए उपकरण[141]
- NetFlix, उनके सर्वर आर्किटेक्चर के दो भागों के लिए[142]
- Nutanix, अपने Enterprise Cloud OS में विभिन्न प्रकार की सूक्ष्म सेवाओं के लिए[143]
- Plug.dj, एक इंटरैक्टिव ऑनलाइन सोशल म्यूजिक स्ट्रीमिंग वेबसाइट[144]
- SendGrid, एक बोल्डर, कोलोराडो स्थित लेन-देन संबंधी ईमेल वितरण और प्रबंधन सेवा।[145]
- SoundCloud, दर्जनों प्रणालियों के लिए[146]
- ब्याह (मंच), उनके ऑनलाइन संगीत सहयोग मंच के पूरे बैकएंड (एपीआई और पार्सर्स) के लिए[147]
- विचार काम करता है, निरंतर वितरण और त्वरित संदेशों के लिए कुछ उपकरण और अनुप्रयोग (CoyIM)[148]
- चिकोटी (सेवा), उनके आईआरसी-आधारित चैट सिस्टम के लिए (पायथन से माइग्रेट)[149]
- उबेर, जियो-फेंस-आधारित प्रश्नों की उच्च मात्रा को संभालने के लिए[150]
यह भी देखें
रिसेप्शन
इंटरफ़ेस सिस्टम, और विरासत की जानबूझकर चूक, मिशेल सिमियोनाटो द्वारा प्रशंसा की गई, जिन्होंने इन विशेषताओं की मानक एमएल के साथ तुलना की, इसे शर्म की बात कहा कि कोई भी लोकप्रिय लैंग्वेज [इस] विशेष मार्ग का अनुसरण नहीं करती है।[151] इंजन यार्ड में डेव एस्टेल्स ने 2009 में लिखा:[152]
गो में गोता लगाना बेहद आसान है। मौलिक भाषा अवधारणाओं की न्यूनतम संख्या है और syntax साफ और स्पष्ट और सुस्पष्ट होने के लिए डिज़ाइन किया गया है। गो अभी भी प्रयोगात्मक है और किनारों के आसपास अभी भी थोड़ा खुरदरा है।
TIOBE प्रोग्रामिंग कम्युनिटी इंडेक्स द्वारा अपने पहले वर्ष, 2009 में गो को प्रोग्रामिंग लैंग्वेज ऑफ द ईयर नामित किया गया था, उस वर्ष किसी भी अन्य लैंग्वेज की तुलना में लोकप्रियता में 12 महीने की बड़ी वृद्धि (नवंबर में इसकी शुरुआत के बाद केवल 2 महीने में) होने के कारण, और जनवरी 2010 तक 13वें स्थान पर पहुंच गया,[153] पास्कल (प्रोग्रामिंग लैंग्वेज) जैसी स्थापित लैंग्वेज को पार करना। जून 2015 तक, इसकी रैंकिंग सूचकांक में 50वें से नीचे गिर गई थी, इसे कोबोल और फोरट्रान से नीचे रखा।[154] लेकिन जनवरी 2017 तक, इसकी रैंकिंग 13वें स्थान पर पहुंच गई थी, जो लोकप्रियता और गोद लेने में महत्वपूर्ण वृद्धि का संकेत देती है। गो को वर्ष 2016 की टीआईओबीई प्रोग्रामिंग लैंग्वेज से सम्मानित किया गया।
ब्रूस एकेल ने कहा है:[155]
C++ की जटिलता (नए C++ में और भी अधिक जटिलता जोड़ी गई है), और उत्पादकता पर परिणामी प्रभाव, अब उचित नहीं है। सी-संगत भाषा का उपयोग करने के लिए सी++ प्रोग्रामर को जिन सभी कठिनाइयों से गुजरना पड़ा, उनका अब कोई मतलब नहीं रह गया है - वे केवल समय और प्रयास की बर्बादी हैं। गो उन समस्याओं के वर्ग के लिए अधिक अर्थ रखता है जिन्हें C++ मूल रूप से हल करने का इरादा रखता था।
लैंग्वेज और उसके 2011 का मूल्यांकन gc सी++ (जीएनयू कंपाइलर कलेक्शन), जावा और स्काला (प्रोग्रामिंग लैंग्वेज) की तुलना में एक गूगल इंजीनियर द्वारा कार्यान्वयन पाया गया:
गो दिलचस्प भाषा सुविधाएँ प्रदान करता है, जो संक्षिप्त और मानकीकृत नोटेशन की भी अनुमति देता है। इस भाषा के कंपाइलर अभी भी अपरिपक्व हैं, जो प्रदर्शन और बाइनरी आकार दोनों में परिलक्षित होता है।
— R. Hundt[156]
मूल्यांकन को गो डेवलपमेंट टीम से खंडन मिला। इयान लांस टेलर, जिन्होंने हंड्ट के पेपर के लिए गो कोड में सुधार किया था, को अपने कोड को प्रकाशित करने के इरादे के बारे में पता नहीं था, और कहते हैं कि उनका संस्करण कभी भी मुहावरेदार या कुशल गो का उदाहरण नहीं था; रसेल कॉक्स ने तब गो कोड, साथ ही सी ++ कोड को अनुकूलित किया, और सी ++ की तुलना में थोड़ी तेजी से चलने के लिए गो कोड प्राप्त किया और पेपर में कोड की तुलना में तीव्रता के क्रम से अधिक।[157]
नामकरण विवाद
10 नवंबर 2009 को, लैंग्वेज के सामान्य विमोचन का दिन, फ्रांसिस मैककेबे, गो के विकासकर्ता! (प्रोग्रामिंग लैंग्वेज)|गो! प्रोग्रामिंग लैंग्वेज (विस्मयादिबोधक बिंदु पर ध्यान दें), अपनी लैंग्वेज के साथ भ्रम को रोकने के लिए गूगल की लैंग्वेज के नाम में बदलाव का अनुरोध किया, जिसे विकसित करने में उन्होंने 10 साल लगाए थे।[158] मैककेबे ने चिंता जताई कि 'बड़ा आदमी' उसके ऊपर भाप से लुढ़क जाएगा, और यह चिंता 120 से अधिक डेवलपर्स के साथ प्रतिध्वनित हुई, जिन्होंने गूगल के आधिकारिक मुद्दों पर टिप्पणी करते हुए कहा कि उन्हें नाम बदलना चाहिए, कुछ के साथ[159] यहां तक कि इस मुद्दे को कहना भी गूगल के आदर्श वाक्य: दुष्ट मत बनो के विपरीत है।[160]
12 अक्टूबर 2010 को, गूगल डेवलपर Russ Cox (@rsc) द्वारा इस मुद्दे को कस्टम स्थिति दुर्भाग्यपूर्ण के साथ निम्नलिखित टिप्पणी के साथ बंद कर दिया गया था:
गो नाम के कई कंप्यूटिंग उत्पाद और सेवाएं हैं। हमारी रिहाई के बाद के 11 महीनों में, दोनों लैंग्वेज में न्यूनतम भ्रम रहा है।[160]
आलोचना
- बीजगणितीय प्रकारों की कमी के साथ संयुक्त गो के अशक्त सूचक से विफलताओं और बेस केस (रिकर्सन) को संभालने में कठिनाई होती है।[161][162]
- गो ओपनिंग ब्रेस को अपनी लाइन पर प्रदर्शित होने की अनुमति नहीं देता है, जो सभी गो प्रोग्रामर्स को एक ही ब्रेस स्टाइल का उपयोग करने के लिए मजबूर करता है।[163]
- गो मानक लाइब्रेरी में फ़ाइल शब्दार्थ बहुत अधिक पॉज़िक्स शब्दार्थ पर आधारित हैं, और वे माइक्रोसॉफ्ट विंडोज़ के लिए अच्छी तरह से मैप नहीं करते हैं।[164][165] ध्यान दें कि यह समस्या विशेष रूप से गो के लिए नहीं है, लेकिन अन्य प्रोग्रामिंग लैंग्वेज ने इसे अच्छी तरह से परिभाषित मानक लाइब्रेरीों के माध्यम से हल किया है।
- एक अध्ययन से पता चला है कि साझा स्मृति के साथ संदेश पासिंग के साथ समवर्ती बग बनाना उतना ही आसान है, कभी-कभी और भी।[166]
यह भी देखें
टिप्पणियाँ
- ↑ Using alternative backends reduces compilation speed and Go's control over garbage collection but provides better machine-code optimization.[18]
- ↑ But "To allow complex statements to occupy a single line, a semicolon may be omitted before a closing ) or }".[52]
- ↑ "if the newline comes after a token that could end a statement, [the lexer will] insert a semicolon".[53]
- ↑ Usually, exactly one of the result and error values has a value other than the type's zero value; sometimes both do, as when a read or write can only be partially completed, and sometimes neither, as when a read returns 0 bytes. See Semipredicate problem: Multivalued return.
- ↑ Jump up to: 5.0 5.1 Language FAQ "Why is there no pointer arithmetic? Safety ... never derive an illegal address that succeeds incorrectly ... using array indices can be as efficient as ... pointer arithmetic ... simplify the implementation of the garbage collector...."[11]
- ↑ Language FAQ "Why does Go not have assertions? ...our experience has been that programmers use them as a crutch to avoid thinking about proper error handling and reporting...."[11]
- ↑ Language FAQ "Why are there no untagged unions...? [they] would violate Go's memory safety guarantees."[11]
- ↑ Language FAQ "Why does Go not have variant types? ... We considered [them but] they overlap in confusing ways with interfaces.... [S]ome of what variant types address is already covered, ... although not as elegantly."[11] (The tag of an interface type[102] is accessed with a type assertion[103]).
- ↑ Questions "How do I get dynamic dispatch of methods?" and "Why is there no type inheritance?" in the language FAQ.[11]
संदर्भ
- ↑ "Is Go an object-oriented language?". Retrieved April 13, 2019.
Although Go has types and methods and allows an object-oriented style of programming, there is no type hierarchy.
- ↑ "Go: code that grows with grace". Retrieved June 24, 2018.
Go is Object Oriented, but not in the usual way.
- ↑ Jump up to: 3.0 3.1 "Text file LICENSE". The Go Programming Language. Retrieved October 5, 2012.
- ↑ "The Go Programming Language Specification - the Go Programming Language".
- ↑ Jump up to: 5.0 5.1 "गो के पास "कार्यान्वयन" घोषणाएं क्यों नहीं हैं?". golang.org. Retrieved October 1, 2015.
- ↑ Pike, Rob (December 22, 2014). "Rob Pike on Twitter". Retrieved March 13, 2016.
Go has structural typing, not duck typing. Full interface satisfaction is checked and required.
- ↑ "lang/go: go-1.4". OpenBSD ports. December 23, 2014. Retrieved January 19, 2015.
- ↑ "Go Porting Efforts". Go Language Resources. cat-v. January 12, 2010. Retrieved January 18, 2010.
- ↑ "Additional IP Rights Grant". The Go Programming Language. Retrieved October 5, 2012.
- ↑ Kincaid, Jason (November 10, 2009). "Google's Go: A New Programming Language That's Python Meets C++". TechCrunch (in English). Retrieved January 18, 2010.
{{cite news}}
: CS1 maint: url-status (link) - ↑ Jump up to: 11.0 11.1 11.2 11.3 11.4 11.5 11.6 "Language Design FAQ". golang.org (in English). January 16, 2010. Retrieved February 27, 2010.
{{cite web}}
: CS1 maint: url-status (link) - ↑ Jump up to: 12.0 12.1 Metz, Cade (May 5, 2011). "Google Go boldly goes where no code has gone before". The Register.
- ↑ "Is the language called Go or Golang?". Retrieved March 16, 2022.
The language is called Go.
- ↑ "Go 1.5 Release Notes". Retrieved January 28, 2016.
The compiler and runtime are now implemented in Go and assembler, without C.
- ↑ "Go 1.11 is Released". August 24, 2018. Retrieved January 1, 2019.
- ↑ "Installing GCC: Configuration". Retrieved December 3, 2011.
Ada, Go and Objective-C++ are not default languages
- ↑ "FAQ: Implementation". golang.org. August 2, 2021. Retrieved August 2, 2021.
- ↑ "gollvm § Is gollvm a replacement for the main Go compiler? (gc)". Git at Google.
- ↑ "A compiler from Go to JavaScript for running Go code in a browser: Gopherjs/Gopherjs". GitHub. April 18, 2020.
- ↑ "Go at Google: Language Design in the Service of Software Engineering". Retrieved October 8, 2018.
- ↑ Pike, Rob (April 28, 2010). "Another Go at Language Design". Stanford EE Computer Systems Colloquium. Stanford University. Video available.
- ↑ "Frequently Asked Questions (FAQ) - The Go Programming Language". golang.org. Retrieved February 26, 2016.
- ↑ Binstock, Andrew (May 18, 2011). "Dr. Dobb's: Interview with Ken Thompson". Archived from the original on January 5, 2013. Retrieved February 7, 2014.
- ↑ Pike, Rob (2012). "Less is exponentially more".
- ↑ Griesemer, Robert (2015). "The Evolution of Go".
- ↑ Griesemer, Robert; Pike, Rob; Thompson, Ken; Taylor, Ian; Cox, Russ; Kim, Jini; Langley, Adam. "Hey! Ho! Let's Go!". Google Open Source. Retrieved May 17, 2018.
- ↑ Shankland, Stephen (March 30, 2012). "Google's Go language turns one, wins a spot at YouTube: The lower-level programming language has matured enough to sport the 1.0 version number. And it's being used for real work at Google". News. CNet. CBS Interactive Inc. Retrieved August 6, 2017.
Google has released version 1 of its Go programming language, an ambitious attempt to improve upon giants of the lower-level programming world such as C and C++.
- ↑ "Release History". golang.org.
- ↑ "Go FAQ: Is Google using Go internally?". Retrieved March 9, 2013.
- ↑ "The Go Gopher - The Go Programming Language". go.dev (in English). Retrieved 2023-02-09.
- ↑ "Go fonts". Go. 16 November 2016. Retrieved 12 March 2019.
- ↑ "Go Font TTFs". GitHub. Retrieved April 2, 2019.
- ↑ "Go's New Brand". The Go Blog. Retrieved 2018-11-09.
- ↑ Merrick, Alice (March 9, 2021). "Go Developer Survey 2020 Results". Go Programming Language. Retrieved March 16, 2022.
- ↑ Jump up to: 35.0 35.1 Pike, Rob (September 26, 2013). "Arrays, slices (and strings): The mechanics of 'append'". The Go Blog. Retrieved March 7, 2015.
- ↑ "E2E: Erik Meijer and Robert Griesemer". Channel 9. Microsoft. May 7, 2012.
- ↑ "Go 2 Draft Designs". Retrieved September 12, 2018.
- ↑ "The Go Blog: Go 2 Draft Designs". August 28, 2018.
- ↑ "Proposal: A built-in Go error check function, "try"". Go repository on GitHub. Retrieved March 16, 2022.
- ↑ "Type Parameters — Draft Design". go.googlesource.com.
- ↑ "Generics in Go". bitfieldconsulting.com.
- ↑ "Go 1.18 is released!". Go Programming Language. March 15, 2022. Retrieved March 16, 2022.
- ↑ "Go 1 and the Future of Go Programs". golang.org.
- ↑ "Go 1.19 Release Notes". go.dev.
{{cite web}}
: CS1 maint: url-status (link) - ↑ "Release History". golang.org.
- ↑ "A Quick Guide to Go's Assembler". go.dev. Retrieved 2021-12-31.
- ↑ Pike, Rob. "द गो प्रोग्रामिंग लैंग्वेज". YouTube. Retrieved July 1, 2011.
- ↑ Pike, Rob (November 10, 2009). The Go Programming Language (flv) (Tech talk). Google. Event occurs at 8:53.
- ↑ "Download and install packages and dependencies". See godoc.org for addresses and documentation of some packages.
- ↑ "GoDoc". godoc.org.
- ↑ Pike, Rob. "The Changelog" (Podcast).
- ↑ "Go Programming Language Specification, §Semicolons". golang.org.
- ↑ "Effective Go, §Semicolons". golang.org.
- ↑ "The Go Programming Language Specification". golang.org.
- ↑ Pike, Rob (October 23, 2013). "Strings, bytes, runes and characters in Go".
- ↑ Doxsey, Caleb. "Structs and Interfaces — An Introduction to Programming in Go". www.golang-book.com. Retrieved 15 October 2018.
- ↑ Gerrand, Andrew. "Go Slices: usage and internals".
- ↑ The Go Authors. "Effective Go: Slices".
- ↑ The Go authors. "Selectors".
- ↑ The Go authors. "Calls".
- ↑ "Go Programming Language Specification, §Package unsafe". golang.org.
- ↑ "The Go Programming Language Specification". go.dev. Retrieved 2021-12-31.
- ↑ "The Go Programming Language Specification". golang.org.
- ↑ "A tour of go". go.dev.
- ↑ "The Go Programming Language Specification". golang.org.
- ↑ "The Go Programming Language Specification". go.dev. Retrieved 2021-12-31.
- ↑ "The Go Programming Language Specification". golang.org.
- ↑ Jump up to: 68.0 68.1 Schmager, Frank; Cameron, Nicholas; Noble, James (2010). GoHotDraw: evaluating the Go programming language with design patterns. Evaluation and Usability of Programming Languages and Tools. ACM.
- ↑ Jump up to: 69.0 69.1 69.2 69.3 69.4 Balbaert, Ivo (2012). The Way to Go: A Thorough Introduction to the Go Programming Language. iUniverse.
- ↑ "The Evolution of Go". talks.golang.org. Retrieved March 13, 2016.
- ↑ Diggins, Christopher (November 24, 2009). "Duck Typing and the Go Programming Language". Dr. Dobb's, The world of software development. Retrieved March 10, 2016.
{{cite web}}
: CS1 maint: url-status (link) - ↑ Ryer, Mat (December 1, 2015). "Duck typing in Go". Retrieved March 10, 2016.
- ↑ "Frequently Asked Questions (FAQ) - The Go Programming Language". golang.org.
- ↑ "The Go Programming Language Specification". golang.org.
- ↑ "The Go Programming Language Specification". golang.org.
- ↑ "reflect package". pkg.go.dev.
- ↑ "map[string]interface{} in Go". bitfieldconsulting.com.
- ↑ "Go Data Structures: Interfaces". Retrieved November 15, 2012.
- ↑ "The Go Programming Language Specification". golang.org.
- ↑ "Go 1.18 Release Notes: Generics". Go Programming Language. March 15, 2022. Retrieved March 16, 2022.
- ↑ "A Tutorial for the Go Programming Language". The Go Programming Language. Retrieved March 10, 2013.
In Go the rule about visibility of information is simple: if a name (of a top-level type, function, method, constant or variable, or of a structure field or method) is capitalized, users of the package may see it. Otherwise, the name and hence the thing being named is visible only inside the package in which it is declared.
- ↑ "go". golang.org.
- ↑ "How to Write Go Code". golang.org.
The packages from the standard library are given short import paths such as "fmt" and "net/http". For your own packages, you must choose a base path that is unlikely to collide with future additions to the standard library or other external libraries. If you keep your code in a source repository somewhere, then you should use the root of that source repository as your base path. For instance, if you have an Example account at example.com/user, that should be your base path
- ↑ Jump up to: 84.0 84.1 Pike, Rob (September 18, 2012). "Concurrency is not Parallelism".
- ↑ Jump up to: 85.0 85.1 85.2 85.3 85.4 Chisnall, David (2012). The Go Programming Language Phrasebook. Addison-Wesley. ISBN 9780132919005.
- ↑ "Effective Go". golang.org.
- ↑ Summerfield, Mark (2012). Programming in Go: Creating Applications for the 21st Century. Addison-Wesley.
- ↑ "The Go Memory Model". Retrieved April 10, 2017.
- ↑ "Go Concurrency Patterns". golang.org.
- ↑ Graham-Cumming, John (August 24, 2013). "Recycling Memory Buffers in Go".
- ↑ "tree.go".
- ↑ Cheslack-Postava, Ewen. "Iterators in Go".
- ↑ Kernighan, Brian W. "A Descent Into Limbo".
- ↑ Jump up to: 94.0 94.1 "The Go Memory Model". Retrieved January 5, 2011.
- ↑ Tang, Peiyi (2010). Multi-core parallel programming in Go (PDF). Proc. First International Conference on Advanced Computing and Communications. Archived from the original (PDF) on September 9, 2016. Retrieved May 14, 2015.
- ↑ Nanz, Sebastian; West, Scott; Soares Da Silveira, Kaue. Examining the expert gap in parallel programming (PDF). Euro-Par 2013. CiteSeerX 10.1.1.368.6137.
- ↑ Go Authors. "Share Memory By Communicating".
- ↑ Cox, Russ. "Off to the Races".
- ↑ Pike, Rob (October 25, 2012). "Go at Google: Language Design in the Service of Software Engineering". Google, Inc. "There is one important caveat: Go is not purely memory safe in the presence of concurrency."
- ↑ "Frequently Asked Questions (FAQ) - the Go Programming Language".
- ↑ "A Story of a Fat Go Binary". September 21, 2018.
- ↑ "Go Programming Language Specification, §Interface types". golang.org.
- ↑ "Go Programming Language Specification, §Type assertions". golang.org.
- ↑ All Systems Are Go. August 17, 2010. Retrieved June 21, 2018.
{{cite book}}
:|website=
ignored (help) - ↑ "Language Design FAQ". 13 November 2009. Archived from the original on 13 November 2009.
- ↑ "Proposal for an exception-like mechanism". golang-nuts. March 25, 2010. Retrieved March 25, 2010.
- ↑ "Weekly Snapshot History". golang.org.
- ↑ "Panic And Recover". Go wiki.
- ↑ "Effective Go". golang.org.
- ↑ "gofmt". golang.org. Retrieved 2021-02-05.
- ↑ "golang/lint public archive". github.com. November 30, 2022.
- ↑ Jump up to: 112.0 112.1 "Effective Go". golang.org.
- ↑ "Unused local variables". yourbasic.org (in English). Retrieved 2021-02-11.
- ↑ "Unused package imports". yourbasic.org (in English). Retrieved 2021-02-11.
- ↑ "Code Review Comments". GitHub. Retrieved July 3, 2018.
- ↑ "Talks". Retrieved July 3, 2018.
- ↑ "Errors Are Values". Retrieved July 3, 2018.
- ↑ "fmt". golang.org. Retrieved 2019-04-08.
- ↑ "testing". golang.org. Retrieved 2020-12-27.
- ↑ avelino/awesome-go: A curated list of awesome Go frameworks, libraries and software, retrieved January 10, 2018
- ↑ "EdgeX Foundry Project". GitHub (in English). Retrieved 2021-02-06.
- ↑ "ipfs/go-ipfs". GitHub (in English). Retrieved June 1, 2018.
- ↑ "lightningnetwork/lnd", GitHub, retrieved April 29, 2020
- ↑ "NATS".
- ↑ "CNCF to host Vitess". Cloud Native Computing Foundation. February 5, 2018.
- ↑ "Cloud Native Computing Foundation Announces Vitess Graduation". Cloud Native Computing Foundation. November 5, 2019.
- ↑ "arctil". arctil.com.
- ↑ "Test driven development in Go | Cacoo". Cacoo (in English). July 29, 2016. Retrieved June 1, 2018.
- ↑ "Chango". GitHub.
- ↑ Heller, Martin (2014-07-17). "Review: Cloud Foundry brings power and polish to PaaS". JavaWorld (in English). Retrieved 2019-01-22.
- ↑ Graham-Cumming, John (July 3, 2012). "Go at CloudFlare".
- ↑ Graham-Cumming, John (November 11, 2013). "What we've been doing with Go".
- ↑ "Go at CoreOS". November 25, 2014.
- ↑ "Couchbase". GitHub.
- ↑ Lee, Patrick (July 7, 2014). "Open Sourcing Our Go Libraries".
- ↑ "Official Go implementation of the Ethereum protocol". GitHub. ethereum. April 18, 2020.
- ↑ "Why we use Ruby on Rails to build GitLab". GitLab (in English). Retrieved 2021-02-06.
Ruby was optimized for the developer, not for running it in production," says Sid. "For the things that get hit a lot and have to be very performant or that, for example, have to wait very long on a system IO, we rewrite those in Go ... We are still trying to make GitLab use less memory. So, we'll need to enable multithreading. When we developed GitLab that was not common in the Ruby on Rails ecosystem. Now it's more common, but because we now have so much code and so many dependencies, it's going to be a longer path for us to get there. That should help; it won't make it blazingly fast, but at least it will use less memory
{{cite web}}
: CS1 maint: url-status (link) - ↑ "dl.google.com: Powered by Go". golang.org.
- ↑ Welsh, Matt (August 18, 2013). "Rewriting a Large Production System in Go".
- ↑ Symonds, David. "High Performance Apps on Google App Engine".
- ↑ "Mongo DB". GitHub. April 18, 2020.
- ↑ "The Netflix Tech Blog: Application data caching using SSDs". May 25, 2016.
- ↑ "golang/go". GitHub. April 18, 2020.
- ↑ Sacks, Steven. "Search & Advances". plug.dj tech blog. Archived from the original on June 11, 2015. Retrieved June 10, 2015.
- ↑ Jenkins, Tim (March 6, 2014). "How to Convince Your Company to Go With Golang". SendGrid's Email Deliverability Blog.
- ↑ Bourgon, Peter. "Go at SoundCloud". Archived from the original on November 11, 2013.
- ↑ "Go at Google I/O and Gopher SummerFest". golang.org.
- ↑ TWSTRIKE (April 17, 2020). "CoyIM". ThoughtWorks STRIKE team.
- ↑ Hiltner, Rhys (July 5, 2016). "Go's march to low-latency GC".
- ↑ "How We Built Uber Engineering's Highest Query per Second Service Using Go". Uber Engineering Blog (in English). February 24, 2016. Retrieved March 2, 2016.
- ↑ Simionato, Michele (November 15, 2009). "Interfaces vs Inheritance (or, watch out for Go!)". artima. Retrieved November 15, 2009.
- ↑ Astels, Dave (November 9, 2009). "Ready, Set, Go!". engineyard. Retrieved November 9, 2009.
- ↑ jt (January 11, 2010). "Google's Go Wins Programming Language Of The Year Award". jaxenter. Retrieved December 5, 2012.
- ↑ "TIOBE Programming Community Index for June 2015". TIOBE Software. June 2015. Retrieved July 5, 2015.
- ↑ Eckel, Bruce (August 27, 2011). "Calling Go from Python via JSON-RPC". Retrieved August 29, 2011.
- ↑ Hundt, Robert (2011). Loop recognition in C++/Java/Go/Scala (PDF). Scala Days.
- ↑ Metz, Cade (July 1, 2011). "Google Go strikes back with C++ bake-off". The Register.
- ↑ Brownlee, John (November 13, 2009). "Google didn't google "Go" before naming their programming language'". Archived from the original on December 8, 2015. Retrieved May 26, 2016.
- ↑ Claburn, Thomas (November 11, 2009). "Google 'Go' Name Brings Accusations Of Evil'". InformationWeek. Archived from the original on July 22, 2010. Retrieved January 18, 2010.
- ↑ Jump up to: 160.0 160.1 "Issue 9 - go — I have already used the name for *MY* programming language". Github. Google Inc. Retrieved October 12, 2010.
- ↑ Yager, Will. "Why Go is not Good". Retrieved 4 November 2018.
- ↑ Dobronszki, Janos. "Everyday Hassles in Go". Retrieved 4 November 2018.
- ↑ "Why are there braces but no semicolons? And why can't I put the opening brace on the next line?". Retrieved March 26, 2020.
The advantages of a single, programmatically mandated format for all Go programs greatly outweigh any perceived disadvantages of the particular style.
- ↑ "I want off Mr. Golang's Wild Ride". February 28, 2020. Retrieved November 17, 2020.
- ↑ "proposal: os: Create/Open/OpenFile() set FILE_SHARE_DELETE on windows #32088". GitHub. May 16, 2019. Retrieved November 17, 2020.
- ↑ Tu, Tengfei (2019). "Understanding Real-World Concurrency Bugs in Go" (PDF).
For example, around 58% of blocking bugs are caused by message passing. In addition to the violation of Go's channel usage rules (e.g., waiting on a channel that no one sends data to or close), many concurrency bugs are caused by the mixed usage of message passing and other new semantics and new libraries in Go, which can easily be overlooked but hard to detect
{{cite web}}
: CS1 maint: url-status (link)
अग्रिम पठन
- Donovan, Alan; Kernighan, Brian (October 2015). The Go Programming Language (1st ed.). Addison-Wesley Professional. p. 400. ISBN 978-0-13-419044-0.
- Bodner, Jon (March 2021). Learning Go (1st ed.). O'Reilly. p. 352. ISBN 9781492077213.