Go में struct प्रिंट करना सीखें: 10 मिनट में शुरू से विशेषज्ञ तक

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

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

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

Go में "struct को प्रिंट करना" इतना आसान क्यों नहीं है?

\n\n

सोचिए: आप Go में कोड लिख रहे हैं, एक सुंदर User struct बनाया, उसमें डेटा भरा, और बस झलक देखना चाहते हैं कि अंदर क्या है। आप fmt.Println(user) लिखते हैं और कुछ ऐसा दिखता है {Alex 25 true}। जानकारीपूर्ण? बिल्कुल नहीं। अगर 15 फील्ड हों तो? अगर उनमें से एक नेस्टेड struct हो? अगर वह struct का slice हो?

\n\n

Stack Overflow पर सवाल "How to print struct variables in console?" ने हज़ारों व्यूज़ बटोरे हैं, यह कोई संयोग नहीं है। हर शुरुआती (और सिर्फ शुरुआती ही नहीं) Golang में इस बात का सामना करता है कि struct का डिफ़ॉल्ट आउटपुट फील्ड नामों के बिना एक उबाऊ स्ट्रिंग होता है। और जब प्रोजेक्ट बड़ा होता है, तो डिबगिंग अंदाज़ा लगाने जैसी हो जाती है।

\n\n

इस लेख में हम Go में struct को कंसोल पर प्रिंट करने के सभी तरीकों पर चर्चा करेंगे: बेसिक से लेकर एडवांस्ड तक। आप सीखेंगे कि struct को खूबसूरती से, फील्ड नामों के साथ, JSON के रूप में, और यहां तक कि अपना खुद का प्रिंट मेथड कैसे लिखें। चलिए शुरू करते हैं!

\n\n

▎1. सबसे आसान तरीका: fmt.Println और इसकी सीमाएं

\n\n

चलिए बुनियादी बातों से शुरू करते हैं। हमारे पास एक struct है:

\n\n
package main\n\nimport "fmt"\n\ntype User struct {\n    Name   string\n    Age    int\n    Active bool\n}\n\nfunc main() {\n    u := User{Name: "अन्ना", Age: 30, Active: true}\n    fmt.Println(u)\n}\n
\n\n

आउटपुट:\n

{अन्ना 30 true}

\n\n

यह काम करता है, लेकिन जानकारीपूर्ण नहीं है। आप यह नहीं देख पाते कि कौन सा मान किस फील्ड का है। अगर struct में 10 फील्ड हों, तो आप अंदाज़ा लगाते रहेंगे कि क्या है। खासकर अगर डेटा टाइप दोहराया जाए (जैसे, लगातार दो string फील्ड)।

\n\n

निष्कर्ष: fmt.Println केवल त्वरित जांच के लिए उपयुक्त है, जब struct छोटा हो और आपको फील्ड का क्रम याद हो।

\n\n

यह कब उपयोगी है?

\n
    \n
  • आप एक बार उपयोग होने वाला स्क्रिप्ट लिख रहे हैं।
  • \n
  • struct में अलग-अलग टाइप के 2-3 फील्ड हैं।
  • \n
  • आप fmt.Println का उपयोग लॉग के लिए कर रहे हैं, जहां गति महत्वपूर्ण है, पठनीयता नहीं।
  • \n
\n\n

▎2. जीवन रक्षक %+v: फील्ड नामों के साथ प्रिंट करें

\n\n

यह शायद Stack Overflow पर सबसे लोकप्रिय जवाब है। fmt.Printf में %+v फॉर्मेट struct को फील्ड नामों के साथ प्रिंट करता है:

\n\n
fmt.Printf("%+v\\n", u)\n
\n\n

आउटपुट:\n

{Name:अन्ना Age:30 Active:true}

\n\n

अब बहुत बेहतर है! आप स्पष्ट रूप से देख सकते हैं कि नाम, उम्र और स्थिति कहां है।

\n\n

fmt के शस्त्रागार में और क्या है?

\n
    \n
  • %v — मानक प्रतिनिधित्व (जैसे Println में)।
  • \n
  • %+v
  • — फील्ड नामों के साथ।\n
  • %#v — पैकेज और टाइप के साथ पूर्ण प्रतिनिधित्व (नीचे देखें)।
  • \n
  • %T — केवल वेरिएबल का टाइप प्रिंट करता है।
  • \n
\n\n

%#v का उदाहरण:

\n
fmt.Printf("%#v\\n", u)\n// main.User{Name:"अन्ना", Age:30, Active:true}\n
\n\n

यह फॉर्मेट तब उपयोगी है जब आप आउटपुट को कॉपी करके वापस कोड में पेस्ट करना चाहते हैं — यह struct का एक वैध लिटरल इनिशियलाइज़ेशन है।

\n\n

सुझाव: %+v कॉम्बिनेशन याद रखें — Go में struct डिबग करते समय यह आपकी रोटी है।

\n\n

▎3. सुंदरता और व्यवस्था: JSON में सीरियलाइज़ेशन

\n\n

जब struct बड़ा, नेस्टेड या इसमें slices हों, तो %+v अपठनीय हो सकता है। यहां JSON काम आता है। Go मानक रूप से struct को JSON में बदल सकता है:

\n\n
package main\n\nimport (\n    "encoding/json"\n    "fmt"\n)\n\ntype Address struct {\n    City  string `json:"city"`\n    Street string `json:"street"`\n}\n\ntype User struct {\n    Name    string  `json:"name"`\n    Age     int     `json:"age"`\n    Active  bool    `json:"active"`\n    Address Address `json:"address"`\n}\n\nfunc main() {\n    u := User{\n        Name:   "इवान",\n        Age:    28,\n        Active: true,\n        Address: Address{\n            City:   "मॉस्को",\n            Street: "टावर्सकाया",\n        }                

ब्लॉग

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