Go और REPL: कैसे बिना कंसोल के डिबगिंग ने मेरा करियर नहीं बिगाड़ा

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: "मेरा कंसोल कहाँ है?"

\n\n

क्या आपने कभी सोचा है: "अगर मैं कोड की एक पंक्ति जल्दी से चला सकूं, एक परिकल्पना की जांच कर सकूं, सिंटैक्स के साथ प्रयोग कर सकूं - और फिर आगे लिख सकूं"? यदि आप Python, JavaScript या Ruby से Go में आए हैं, तो यह प्रश्न विशेष रूप से महत्वपूर्ण हो जाता है। वहाँ REPL (Read-Eval-Print Loop) है - एक इंटरैक्टिव वातावरण जहाँ कोड पंक्ति दर पंक्ति निष्पादित होता है। आप 2 + 2 लिखते हैं - और तुरंत 4 देखते हैं। क्या बात है!

\n\n

लेकिन फिर आप Go खोलते हैं, go run main.go लिखते हैं, कंपाइल करते हैं... और समझ जाते हैं: कोई जादू नहीं है। या है? Stack Overflow पर प्रश्न "Does Go provide a REPL?" ने हजारों व्यूज और दर्जनों टिप्पणियाँ एकत्र की हैं। लोग भ्रमित होते हैं, निराश होते हैं, और कभी-कभी भाषा को छोड़ भी देते हैं।

\n\n

इस लेख में, मैं बताऊंगा कि Go में बिल्ट-इन REPL क्यों नहीं है, कौन से उपकरण इसे बदल सकते हैं, और - सबसे महत्वपूर्ण बात - उन सामान्य गलतियों से कैसे बचें जो Go सीखने को सिरदर्द में बदल देती हैं। चलिए शुरू करते हैं!

\n\n

Go में REPL क्यों नहीं है? (और यह बग नहीं, बल्कि एक फीचर है)

\n\n

नौसिखियों की पहली गलती REPL की अनुपस्थिति को भाषा की कमी मानना है। वास्तव में यह एक आर्किटेक्चरल निर्णय है। Go एक कंपाइल्ड, सख्ती से टाइप की गई भाषा है। REPL इंटरप्रिटेशन या JIT-कंपाइलेशन मानता है, जो Go के दर्शन के विपरीत है: "सरलता, गति, पूर्वानुमानशीलता"।

\n\n

जब आप Python में REPL में लिखते हैं, तो इंटरप्रेटर कोड को पंक्ति दर पंक्ति निष्पादित करता है। Go में, प्रत्येक प्रोग्राम पहले विश्लेषित किया जाता है, मशीन कोड में कंपाइल किया जाता है, और फिर निष्पादित किया जाता है। यह देता है:

\n
    \n
  • बिजली की गति से निष्पादन (production में कोई आश्चर्य नहीं);
  • \n
  • कंपाइलेशन चरण में सख्त टाइप जांच (रनटाइम में कम त्रुटियाँ);
  • \n
  • कम जादू (आपको ठीक-ठीक पता है कि आपका कोड क्या करता है)।
  • \n
\n\n

लेकिन त्वरित प्रयोगों का क्या? क्या हर बार main.go फ़ाइल बनानी होगी? स्पॉयलर: नहीं।

\n\n

REPL के बिना काम करते समय शीर्ष-3 गलतियाँ (और उनसे कैसे बचें)

\n\n

गलती नंबर 1: "मैं सब कुछ एक फ़ाइल में लिखूंगा और go run के माध्यम से चलाऊंगा"

\n\n

यह सबसे आम गलतफहमी है। नौसिखिए एक विशाल main.go फ़ाइल बनाते हैं, उसमें सारा कोड डालते हैं, go run के माध्यम से परीक्षण करते हैं, और फिर आश्चर्य करते हैं कि कंपाइलर अप्रयुक्त वेरिएबल्स या इम्पोर्ट्स पर क्यों आपत्ति करता है।

\n\n

कैसे बचें: Go Playground (play.golang.org) का उपयोग करें। यह एक आधिकारिक वेब टूल है जो मिनी-REPL की तरह काम करता है। आप कोड लिखते हैं, "Run" दबाते हैं - और परिणाम देखते हैं। हाँ, यह पंक्ति-दर-पंक्ति इनपुट नहीं है, लेकिन सिंटैक्स, एल्गोरिदम या कोड के छोटे टुकड़ों की जाँच के लिए यह आदर्श है।

\n\n

उदाहरण:

\n
package main\n\nimport "fmt"\n\nfunc main() {\n    message := "Hello, Go REPL!"\n    fmt.Println(message)\n}
\n

चलाया - आउटपुट मिला। तेज़, साफ, बिना अनावश्यक फ़ाइलों के।

\n\n

गलती नंबर 2: "Go में REPL बस बिना सेव किए go run है"

\n\n

कुछ लोग go run को REPL के रूप में उपयोग करने का प्रयास करते हैं: वे echo या cat के माध्यम से सीधे टर्मिनल में कोड लिखते हैं। यह केवल तुच्छ उदाहरणों के लिए काम करता है, लेकिन जैसे ही इम्पोर्ट्स, पैकेज या कंपाइलेशन त्रुटियाँ दिखाई देती हैं - सब कुछ टूट जाता है।

\n\n

कैसे बचें: gore इंस्टॉल करें - यह Go के लिए लगभग पूर्ण REPL है। यह आपको इंटरैक्टिव मोड में एक्सप्रेशन निष्पादित करने, वेरिएबल घोषित करने और यहाँ तक कि पैकेज इम्पोर्ट करने की अनुमति देता है।

\n\n

इंस्टॉलेशन:

\n
go install github.com/motemen/gore@latest
\n

चलाना:

\n
gore
\n

काम करने का उदाहरण:

\n
gore> 2 + 2\n4\ngore> import "fmt"\ngore> fmt.Println("Hello from gore!")\nHello from gore!
\n

आदर्श नहीं, लेकिन क्लासिक REPL के बहुत करीब। मुख्य बात यह न भूलें कि यह एक तृतीय-पक्ष उपकरण है, और यह भाषा की सभी सुविधाओं का समर्थन नहीं करता है (उदाहरण के लिए, इंटरैक्टिव मोड में goroutines अप्रत्याशित व्यवहार कर सकते हैं)।

\n\n

गलती नंबर 3: "मैं main() में टेस्ट लिखूंगा और उन्हें चलाऊंगा

ब्लॉग

पुस्तक अनुशंसाएँ