Go Academy · पाठ

Stringer इंटरफ़ेस

प्रकारों के प्रिंट होने का तरीका अनुकूलित करें

पाठ 3, कुल 4 में से13 चरण

Stringer इंटरफ़ेस, CoddyKit पर Go Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Go Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

डिफ़ॉल्ट स्ट्रक्चर प्रिंटिंग

डिफ़ॉल्ट रूप से, %v के साथ स्ट्रक्चर प्रिंट करने पर उसके कच्चे फ़ील्ड दिखाई देते हैं। डीबगिंग के लिए यह ठीक है, लेकिन पाठक के लिए हमेशा सुविधाजनक नहीं होता।

package main

import "fmt"

type Color struct{ R, G, B int }

func main() {
    c := Color{255, 0, 0}
    fmt.Println(c)
}

Stringer इंटरफ़ेस

fmt.Stringer इंटरफ़ेस में एक विधि होती है:

  • String() string

जो भी प्रकार इसे परिभाषित करता है, वह यह नियंत्रित करता है कि प्रिंट होने पर वह कैसा दिखाई देगा।

package main

import "fmt"

type Greeting struct{ Name string }

func (g Greeting) String() string {
    return "Hello, " + g.Name
}

func main() {
    fmt.Println(Greeting{"Ada"})
}

स्वचालित रूप से उपयोग होता है

जब किसी प्रकार में String() विधि होती है, तब Println, %v या %s के साथ Printf और इनके संबंधित फ़ंक्शन उसे स्वचालित रूप से बुलाते हैं।

package main

import "fmt"

type Greeting struct{ Name string }

func (g Greeting) String() string {
    return "Hi " + g.Name
}

func main() {
    g := Greeting{"Bob"}
    fmt.Printf("%s and %v\n", g, g)
}

String() के अंदर फ़ॉर्मैट करना

साफ़ और अनुकूलित प्रस्तुति बनाने के लिए परिणाम को fmt.Sprintf से तैयार करें।

package main

import "fmt"

type Color struct{ R, G, B int }

func (c Color) String() string {
    return fmt.Sprintf("rgb(%d, %d, %d)", c.R, c.G, c.B)
}

func main() {
    fmt.Println(Color{255, 128, 0})
}

नामित प्रकारों पर Stringer

Stringer केवल स्ट्रक्चर के लिए नहीं है। कोई भी नामित प्रकार, यहाँ तक कि int पर आधारित प्रकार भी इसे लागू कर सकता है। यह एनम बनाने का पारंपरिक तरीका है।

package main

import "fmt"

type Day int

func (d Day) String() string {
    names := []string{"Mon", "Tue", "Wed"}
    return names[d]
}

func main() {
    fmt.Println(Day(1))
}

अच्छे ढंग से प्रिंट होने वाले एनम

स्थिरांक को संख्याओं के बजाय पढ़ने योग्य नामों के रूप में प्रिंट करने के लिए iota को Stringer के साथ मिलाएँ।

package main

import "fmt"

type State int

const (
    Idle State = iota
    Running
    Done
)

func (s State) String() string {
    return []string{"Idle", "Running", "Done"}[s]
}

func main() {
    fmt.Println(Running)
}

मान बनाम पॉइंटर रिसीवर

यदि String() में मान रिसीवर का उपयोग होता है, तो मान और पॉइंटर दोनों अच्छे ढंग से प्रिंट होते हैं। पॉइंटर रिसीवर के साथ केवल पॉइंटर ही इसे सक्रिय करते हैं।

package main

import "fmt"

type Tag struct{ Name string }

func (t Tag) String() string { return "#" + t.Name }

func main() {
    t := Tag{"go"}
    fmt.Println(t)
    fmt.Println(&t)
}

अनंत पुनरावृत्ति से बचें

अपने ही String() के अंदर उसी प्रकार पर कभी भी fmt.Sprintf("%v", t) न बुलाएँ। इससे String() बार-बार हमेशा के लिए बुलता रहेगा। फ़ील्ड को सीधे फ़ॉर्मैट करें।

package main

import "fmt"

type Money struct{ Cents int }

func (m Money) String() string {
    return fmt.Sprintf("$%.2f", float64(m.Cents)/100)
}

func main() {
    fmt.Println(Money{1050})
}

स्लाइस में Stringer

जब आप Stringer मानों की स्लाइस प्रिंट करते हैं, तो हर तत्व को उसकी String() विधि से फ़ॉर्मैट किया जाता है।

package main

import "fmt"

type Tag struct{ Name string }

func (t Tag) String() string { return "#" + t.Name }

func main() {
    tags := []Tag{{"go"}, {"web"}}
    fmt.Println(tags)
}

इसे इंटरफ़ेस के रूप में उपयोग करना

आप किसी भी Stringer को fmt.Stringer चर में संग्रहीत कर सकते हैं और इंटरफ़ेस के माध्यम से String() बुला सकते हैं।

package main

import "fmt"

type City struct{ Name string }

func (c City) String() string { return "City of " + c.Name }

func main() {
    var s fmt.Stringer = City{"Oslo"}
    fmt.Println(s.String())
}

यह महत्वपूर्ण क्यों है

Stringer लागू करने से आपके प्रकार हर उस जगह साफ़ आउटपुट देते हैं जहाँ उन्हें प्रिंट या लॉग किया जाता है; हर कॉल स्थान पर अतिरिक्त फ़ॉर्मैटिंग कोड की आवश्यकता नहीं रहती।

package main

import "fmt"

type Temp float64

func (t Temp) String() string {
    return fmt.Sprintf("%.1f°C", float64(t))
}

func main() {
    fmt.Println(Temp(21.5))
}

त्वरित जाँच

fmt.Stringer को संतुष्ट करने के लिए किसी प्रकार को कौन-सी विधि परिभाषित करनी होगी?

पुनरावृत्ति: Stringer इंटरफ़ेस

आपने प्रिंटिंग को अनुकूलित करना सीखा:

  • fmt.Stringer को संतुष्ट करने के लिए String() string लागू करें।
  • %v और %s के लिए fmt इसे स्वचालित रूप से बुलाता है।
  • यह एनम के लिए उपयोगी है; उसी प्रकार पर पुनरावर्ती %v से बचें।
package main

import "fmt"

type Level int

func (l Level) String() string {
    return []string{"low", "mid", "high"}[l]
}

func main() {
    fmt.Println(Level(2))
}
शुरुआत निःशुल्क

एआई शिक्षक के साथ Go सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “Stringer इंटरफ़ेस” पाठ निःशुल्क है?

हाँ — Go Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Stringer इंटरफ़ेस” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Stringer इंटरफ़ेस” में मैं क्या सीखूँगा?

प्रकारों के प्रिंट होने का तरीका अनुकूलित करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Go Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Go Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Go Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“Stringer इंटरफ़ेस” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Go Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Go Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Printf क्रियापद
  2. Sprintf और Fprintf
  3. Stringer इंटरफ़ेस
  4. इनपुट स्कैन करना
← Go Academy पर वापस जाएँ