"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > साझा फ़ील्ड के साथ समान गो संरचनाओं के लिए फ़ंक्शन कैसे प्रबंधित करें?

साझा फ़ील्ड के साथ समान गो संरचनाओं के लिए फ़ंक्शन कैसे प्रबंधित करें?

2024-11-08 को प्रकाशित
ब्राउज़ करें:856

How to Manage Functions for Similar Go Structs with Shared Fields?

गो सर्वोत्तम अभ्यास: साझा फ़ील्ड के साथ समान संरचनाओं के लिए कार्यों का प्रबंधन

गो में, समान फ़ील्ड के साथ कई संरचनाओं का सामना करना आम बात है, और उन पर समान ऑपरेशन करने की आवश्यकता है। लचीलापन बनाए रखते हुए कोड दोहराव से बचने के लिए, निम्नलिखित रणनीतियों पर विचार करें:

साझा फ़ील्ड के लिए एक कस्टम प्रकार बनाना:

यदि साझा फ़ील्ड एक सरल डेटा प्रकार है ( उदाहरण के लिए, स्ट्रिंग), इसके लिए एक कस्टम प्रकार परिभाषित करने पर विचार करें। यह आपको कस्टम प्रकार में विधियों को संलग्न करने की अनुमति देता है, जिसे बाद में उस प्रकार को एम्बेड करने वाली किसी भी संरचना द्वारा उपयोग किया जा सकता है।

type Version string

func (v Version) PrintVersion() {
    fmt.Println("Version is", v)
}

फिर, संस्करण प्रकार को संरचनाओं में एम्बेड करें:

type Game struct {
    Name               string
    MultiplayerSupport bool
    Genre              string
    Version
}

type ERP struct {
    Name               string
    MRPSupport         bool
    SupportedDatabases []string
    Version
}

यह आपको संस्करण फ़ील्ड पर PrintVersion विधि का उपयोग करके संस्करण प्रिंट करने की अनुमति देता है:

g.PrintVersion()
e.PrintVersion()

प्रतिबिंब का उपयोग करना:

यदि साझा फ़ील्ड विभिन्न प्रकार की हो सकती है या यदि आप अधिक लचीलापन चाहते हैं, तो आप उचित रूप से गतिशील रूप से लागू करने के लिए प्रतिबिंब का उपयोग कर सकते हैं तरीका। यह दृष्टिकोण अधिक जटिल है और इसमें कुछ प्रदर्शन निहितार्थ हैं, लेकिन यह अधिक लचीलापन प्रदान करता है।

type Printer interface {
    PrintVersion() error
}

func PrintVersion(p Printer) error {
    t := reflect.TypeOf(p)
    method, ok := t.MethodByName("PrintVersion")
    if !ok {
        return fmt.Errorf("object doesn't have a PrintVersion method")
    }

    return method.Func.Call([]reflect.Value{reflect.ValueOf(p)})[0].Interface().(error)
}

फिर आप प्रिंटर इंटरफ़ेस को लागू करने वाले किसी भी ऑब्जेक्ट पर PrintVersion विधि को लागू करने के लिए PrintVersion फ़ंक्शन का उपयोग कर सकते हैं:

var game Game
var erp ERP

PrintVersion(game)
PrintVersion(erp)
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3