गो सर्वोत्तम अभ्यास: साझा फ़ील्ड के साथ समान संरचनाओं के लिए कार्यों का प्रबंधन
गो में, समान फ़ील्ड के साथ कई संरचनाओं का सामना करना आम बात है, और उन पर समान ऑपरेशन करने की आवश्यकता है। लचीलापन बनाए रखते हुए कोड दोहराव से बचने के लिए, निम्नलिखित रणनीतियों पर विचार करें:
साझा फ़ील्ड के लिए एक कस्टम प्रकार बनाना:
यदि साझा फ़ील्ड एक सरल डेटा प्रकार है ( उदाहरण के लिए, स्ट्रिंग), इसके लिए एक कस्टम प्रकार परिभाषित करने पर विचार करें। यह आपको कस्टम प्रकार में विधियों को संलग्न करने की अनुमति देता है, जिसे बाद में उस प्रकार को एम्बेड करने वाली किसी भी संरचना द्वारा उपयोग किया जा सकता है।
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