Refactoring विधि का हिस्सा बनने के लिए एक इंटरफेस

0

सवाल

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

मैं निम्नलिखित इंटरफेस, संरचना और तरीकों:

type Executing interface {
    Execute()
}

type MyExecuter struct {
     attribut1 string
}

//The function I wish to move
func (exe1 *MyExecuter) format() string {
    return fmt.sprintf ("formated : %s", exe1.attribut1) 
}


func (exe1 *MyExecuter) Execute() {
    //Executing
    fmt.Println(exe.format())
}



func GetExecuter () Executer{
    return MyExecuter{attribut1: "test"}
}

तो यहाँ मैं एक सामान्य इंटरफ़ेस को निष्पादित, इस इंटरफेस के द्वारा पहुँचा जा जाएगा वस्तु से लौटे GetExecuter विधि है ।

अब, के रूप में के भाग के कार्यान्वयन के Executer, मैं ले जाना चाहते हैं प्रारूप विधि के भाग के रूप में एक इंटरफेस है.
तो मैं कर रहा हूँ निम्नलिखित है:

type Formatting interface {
    format() string
}

type Formatter struct {}

func (formatter *Formatter) format(exe1 *MyExecuter) (string) {
    return fmt.sprintf ("formated : %s", exe1.attribut1)
}

इसलिए मैं बनाने के लिए एक नया इंटरफेस, एक नई संरचना, और अद्यतन कार्य करने के लिए ले के रूप में विशेषता मेरे पिछले संरचना है ।

जबकि यह काम करने लगता है, यह मुझे लगता है यह थोड़ा जटिल है । विशेष रूप से हिस्सा है जहां मैं एक संदर्भ जोड़ने की जरूरत करने के लिए अपने प्रारंभिक वस्तु के रूप में की विशेषता विधि है । मैं कर रहा हूँ यहाँ कुछ गलत है, या यह सही तरीका है?

go interface
2021-11-22 20:42:22
1

सबसे अच्छा जवाब

3

अपने Executer कार्यान्वयन पहले से ही लागू करता है Formatting इंटरफ़ेस:

type Executing interface {
    Execute()
}

type Formatting interface {
    format() string
}

func (exe1 MyExecuter) format() string {
    return fmt.sprintf ("formated : %s", exe1.attribut1) 
}


func (exe1 MyExecuter) Execute() {
    //Executing
    fmt.Println(exe.format())
}

v:=MyExecuter{}
// Here, v implements Executing and Formatting interfaces

एक बात नोट करने के लिए यहाँ है: अपने कोड से पता चलता सूचक रिसीवर. इसका मतलब है कि तरीकों में परिभाषित कर रहे हैं के लिए *MyExecuterहै , लेकिन नहीं के लिए MyExecuter. है, तो आप करने के लिए संकेत पारित करने के लिए संरचना, उदाहरण के लिए यह काम करने के लिए. या, के रूप में मैं था ऊपर, उपयोग के मूल्य रिसीवर तो तरीकों में परिभाषित कर रहे हैं के लिए दोनों MyExecuter और *MyExecuter.

2021-11-22 20:47:20

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में