Go Academy · पाठ

मानक लाइब्रेरी के मुख्य इंटरफ़ेस

fmt.Stringer, io.Reader, io.Writer

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

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

fmt.Stringer

fmt.Stringer में एक मेथड होता है: String() string। अपने प्रकार को fmt.Println और %v के साथ दिखाए जाने का तरीका नियंत्रित करने के लिए इसे लागू करें:

package main
import "fmt"

type Color int
const (Red Color = iota; Green; Blue)
func (c Color) String() string {
    return []string{"Red","Green","Blue"}[c]
}

func main() {
    fmt.Println(Red, Green, Blue) // Red Green Blue
}

error इंटरफ़ेस

पहले से उपलब्ध error इंटरफ़ेस में एक मेथड होता है: Error() string। इसे लागू करने वाले किसी भी प्रकार का उपयोग त्रुटि के रूप में किया जा सकता है:

package main
import "fmt"

type ValidationError struct{ Field, Msg string }
func (e *ValidationError) Error() string {
    return e.Field + ": " + e.Msg
}

func validate(age int) error {
    if age < 0 { return &ValidationError{"age", "must be non-negative"} }
    return nil
}

func main() {
    fmt.Println(validate(-1))
}

io.Reader

io.Reader में एक मेथड होता है: Read(p []byte) (n int, err error)। फ़ाइलें, HTTP बॉडी, स्ट्रिंग और बफ़र सभी इसे लागू करते हैं:

package main
import ("fmt"; "strings")

func countBytes(r interface{ Read([]byte)(int,error) }) int {
    buf := make([]byte, 512)
    total := 0
    for {
        n, err := r.Read(buf)
        total += n
        if err != nil { break }
    }
    return total
}

func main() {
    r := strings.NewReader("hello world")
    fmt.Println(countBytes(r)) // 11
}

io.Writer

io.Writer में एक मेथड होता है: Write(p []byte) (n int, err error)। इसका उपयोग fmt.Fprintf, लॉग दर्ज करने, HTTP प्रतिक्रिया-लेखकों आदि द्वारा किया जाता है:

package main
import ("bytes"; "fmt")

func main() {
    var buf bytes.Buffer
    fmt.Fprintf(&buf, "Hello, %s!", "Go")
    fmt.Println(buf.String()) // Hello, Go!
}

io.ReadWriter और io.Closer

मानक लाइब्रेरी छोटे इंटरफ़ेस को मिलाकर बड़े इंटरफ़ेस बनाती है:

package main
import "io"

// io.ReadWriter = io.Reader + io.Writer
// io.ReadCloser = io.Reader + io.Closer
// io.ReadWriteCloser = all three

func process(rw io.ReadWriter) {
    buf := make([]byte, 8)
    rw.Read(buf)
    rw.Write(buf)
}

func main() { _ = process }

sort.Interface

sort.Interface के लिए Len() int, Less(i, j int) bool और Swap(i, j int) आवश्यक हैं:

package main
import ("fmt"; "sort")

type ByLength []string
func (b ByLength) Len() int           { return len(b) }
func (b ByLength) Less(i, j int) bool { return len(b[i]) < len(b[j]) }
func (b ByLength) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }

func main() {
    fruits := ByLength{"banana","apple","kiwi"}
    sort.Sort(fruits)
    fmt.Println([]string(fruits)) // [kiwi apple banana]
}

http.Handler

http.Handler में एक मेथड होता है: ServeHTTP(ResponseWriter, *Request)। Go का पूरा HTTP स्टैक इसी एक इंटरफ़ेस पर बना है:

package main
import ("fmt"; "net/http")

type Hello struct{}
func (h Hello) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, World!")
}

func main() {
    http.ListenAndServe(":8080", Hello{})
}

fmt.GoStringer

अपने प्रकार के %#v (Go-वाक्यविन्यास) रूप को नियंत्रित करने के लिए GoString() string लागू करें:

package main
import "fmt"

type Version struct{ Major, Minor int }
func (v Version) GoString() string {
    return fmt.Sprintf("Version{%d, %d}", v.Major, v.Minor)
}

func main() {
    fmt.Printf("%#v\n", Version{1, 18}) // Version{1, 18}
}

encoding.TextMarshaler

अपने अनुकूलित पाठ एन्कोडिंग (JSON स्ट्रिंग, YAML आदि) के लिए MarshalText() ([]byte, error) और UnmarshalText([]byte) error लागू करें:

package main
import "fmt"

type Status int
const (Active Status = iota; Inactive)
func (s Status) MarshalText() ([]byte, error) {
    if s == Active { return []byte("active"), nil }
    return []byte("inactive"), nil
}

func main() {
    s := Active
    b, _ := s.MarshalText()
    fmt.Println(string(b)) // active
}

मानक इंटरफ़ेस का संयोजन

बिना कोई नया प्रकार लिखे शक्तिशाली प्रक्रियाओं की शृंखलाएँ बनाने के लिए मानक इंटरफ़ेस को io.TeeReader, io.MultiWriter आदि के साथ मिलाएँ:

package main
import ("bytes"; "fmt"; "io"; "strings")

func main() {
    r := strings.NewReader("hello")
    var buf bytes.Buffer
    tee := io.TeeReader(r, &buf)
    io.ReadAll(tee)
    fmt.Println(buf.String()) // hello
}

त्वरित जाँच

Go में त्रुटि के रूप में उपयोग किए जाने के लिए किसी प्रकार को कौन-सा इंटरफ़ेस लागू करना आवश्यक है?

सारांश

मानक लाइब्रेरी के प्रमुख इंटरफ़ेस:

  • fmt.Stringer — अनुकूलित प्रिंट रूप
  • error — त्रुटि मान
  • io.Reader / io.Writer — स्ट्रीमिंग I/O
  • sort.Interface — अनुकूलित क्रमबद्धता
  • http.Handler — HTTP अनुरोध प्रबंधन

अभ्यास प्रश्न

[]Person पर sort.Interface लागू करें (जहाँ Person में Name और Age फ़ील्ड हों), ताकि सूची आयु के घटते क्रम में क्रमबद्ध हो। क्रमबद्ध सूची प्रिंट करें।

शुरुआत निःशुल्क

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. इंटरफ़ेस परिभाषित करना और लागू करना
  2. मानक लाइब्रेरी के मुख्य इंटरफ़ेस
  3. प्रकार अभिकथन और प्रकार स्विच
  4. इंटरफ़ेस संयोजन और सर्वोत्तम अभ्यास
← Go Academy पर वापस जाएँ