Go एक सेतु की तरह: Python, C और अन्य भाषाओं के साथ एकीकरण

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

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

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

Go एक द्वीप नहीं, बल्कि एक पुल क्यों है

\n\n

Go एक शानदार भाषा है। यह तेज़, कंपाइल की जाने वाली और एक उत्कृष्ट मानक लाइब्रेरी वाली है। लेकिन आइए ईमानदार रहें: वास्तविक दुनिया में, हम शायद ही कभी एक ही भाषा में सब कुछ नए सिरे से लिखते हैं। आपके पास C में एक पुरानी, समय-परीक्षित लाइब्रेरी है जिसे फिर से लिखना अफ़सोस की बात होगी। या मशीन लर्निंग के लिए Python में एक बढ़िया स्क्रिप्ट है। या आप Go लॉजिक को सीधे ब्राउज़र में चलाना चाहते हैं।

\n

और फिर सवाल उठता है: Go को अन्य भाषाओं के साथ कैसे एकीकृत करें? डरें नहीं, Go को विशेष रूप से एक अच्छा 'पड़ोसी' बनने के लिए डिज़ाइन किया गया था। PythonLib पर इस लेख में, हम आपके Go प्रोग्राम को दूसरे कोड के साथ जोड़ने के तीन मुख्य तरीकों पर चर्चा करेंगे। आप जानेंगे कि cgo कैसे काम करता है, सिस्टम कॉल के माध्यम से Python फ़ंक्शन को कैसे कॉल करें, और यहां तक कि Go को WebAssembly में कैसे कंपाइल करें।

\n\n

cgo के माध्यम से Go का C के साथ एकीकरण: क्लासिक तरीका

\n\n

सबसे सीधा और शक्तिशाली तरीका cgo है। यह कोई लाइब्रेरी नहीं है, बल्कि Go का एक अंतर्निहित तंत्र है जो आपके कोड को सीधे C फ़ंक्शन को कॉल करने की अनुमति देता है। यह कैसे काम करता है? आप बस "C" इम्पोर्ट करते हैं और उससे पहले C कोड के साथ एक टिप्पणी लिखते हैं। Go कंपाइलर सब कुछ जोड़ देगा।

\n\n

cgo के साथ पहला प्रोग्राम लिखना

\n\n

आइए एक सरल उदाहरण लिखें: C से मानक printf को कॉल करें। main.go फ़ाइल बनाएं:

\n\n
package main\n\n/*\n#include <stdio.h>\n#include <stdlib.h>\n\nvoid hello_cgo(const char* name) {\n    printf("C से नमस्ते, %s!\\n", name);\n}\n*/\nimport "C"\nimport "unsafe"\n\nfunc main() {\n    name := C.CString("Gopher")\n    defer C.free(unsafe.Pointer(name))\n    C.hello_cgo(name)\n}\n
\n\n

चलाएं: go run main.go। यदि आपके पास GCC (या Windows पर MinGW) स्थापित है, तो सब कुछ कंपाइल हो जाएगा। आप «C से नमस्ते, Gopher!» देखेंगे। जादू!

\n\n

महत्वपूर्ण: C.CString C हीप में मेमोरी आवंटित करता है, इसलिए हमें इसे C.free के माध्यम से मुक्त करना होगा। अन्यथा - मेमोरी लीक। Cgo के लिए आपसे अनुशासन की आवश्यकता है।

\n\n

जटिल प्रकारों को पास करना: स्ट्रक्चर

\n\n

अक्सर स्ट्रिंग के बजाय स्ट्रक्चर के साथ काम करने की आवश्यकता होती है। मान लीजिए, हमारे पास मैट्रिक्स के साथ काम करने के लिए C लाइब्रेरी है। हम इसमें Go स्ट्रक्चर पास करना चाहते हैं। इसे इस तरह करें:

\n\n
package main\n\n/*\ntypedef struct {\n    int x;\n    int y;\n    int result;\n} Point;\n\nPoint add_points(Point a, Point b) {\n    Point r;\n    r.x = a.x + b.x;\n    r.y = a.y + b.y;\n    r.result = r.x + r.y;\n    return r;\n}\n*/\nimport "C"\nimport "fmt"\n\ntype GoPoint struct {\n    X, Y, Result int\n}\n\nfunc main() {\n    a := C.Point{x: 10, y: 20}\n    b := C.Point{x: 30, y: 40}\n    r := C.add_points(a, b)\n\n    goPoint := GoPoint{\n        X:      int(r.x),\n        Y:      int(r.y),\n        Result: int(r.result),\n    }\n    fmt.Printf("Go को मिला: Point{X:%d, Y:%d, Result:%d}\\n", goPoint.X, goPoint.Y, goPoint.Result)\n}\n
\n\n

ध्यान दें: हम C प्रकारों को स्पष्ट रूप से Go प्रकारों में बदल रहे हैं। Cgo स्वचालित रूप से स्ट्रक्चर को मैप नहीं कर सकता, इसलिए आप हमेशा रूपांतरण के लिए जिम्मेदार हैं। यह Go का C भाषा के साथ एकीकरण के मुख्य समझौतों में से एक है।

\n\n

cgo की आवश्यकता कब नहीं है

\n

cgo का उपयोग न करें यदि:

\n
    \n
  • आपको बस टर्मिनल में एक कमांड चलाने की आवश्यकता है - os/exec का उपयोग करें।
  • \n
  • आप क्रॉस-प्लेटफ़ॉर्म कोड लिख रहे हैं - cgo बिल्ड को जटिल बनाता है।
  • \n
  • प्रदर्शन महत्वपूर्ण नहीं है - cgo संदर्भ स्विचिंग पर ओवरहेड जोड़ता है।
  • \n
\n\n

Go का Python के साथ एकीकरण: समझदारी से स्क्रिप्टिंग

\n\n

Python और Go एक बेहतरीन जोड़ी हैं। Go गति और समानता के लिए, Python लचीलेपन और पारिस्थितिकी तंत्र (NumPy, TensorFlow) के लिए। उन्हें कैसे जोड़ा जाए? हमारे पास दो दृष्टिकोण हैं: 'भारी' (cgo और Python C API के माध्यम से) और 'हल्का' (उपप्रक्रियाओं के माध्यम से)।

\n\n

तरीका 1: os/exec के माध्यम से Python को कॉल करना (सरल और विश्वसनीय)

\n\n

शिक्षा के लिए सबसे सुरक्षित तरीका Python स्क्रिप्ट को एक अलग प्रक्रिया के रूप में चलाना है।

ब्लॉग

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