करता है "स्वीकार इंटरफेस" तोड़ निंदा टूलींग?

0

सवाल

निंदा

समर्थित तरह के अंकन के कार्यों के रूप में पदावनत किया गया है कुछ इस तरह:

type MyStruct struct {
}

// MyFunc returns hello
// Deprecated: Use YourFunc
func (m MyStruct) MyFunc() string {
  return "hello"
}

आधुनिक इडस पर प्रकाश डाला जाएगा किसी भी प्रयोगों के इस समारोह में linters और भी बढ़ा चेतावनी (मैं व्यक्तिगत रूप से नहीं यह जाँच)

Showing the IDE highlight

स्वीकार इंटरफेस । वापसी structs.

एक लोकप्रिय सबसे अच्छा अभ्यास है "स्वीकार इंटरफेस । वापसी structs." - जो आदत को प्रोत्साहित करने के लिए ठोस डिजाइन सॉफ्टवेयर में.

हालाँकि, निम्न कोड है जो इस प्रकार है सबसे अच्छा अभ्यास - छा लेता निंदा चेतावनी:


// MyInterface specifies a single function that we require from a dependency
type MyInterface interface {
    MyFunc() string
}

func main() {

    var v MyInterface
    v = MyStruct{}
    v.MyFunc()

}

Showing the lack of IDE highlighting

सवाल

वहाँ है इस समस्या का समाधान?

अगर मैं थे, उदाहरण के लिए, एक पुस्तकालय मेंटेनर: मैं कैसे कर सकते हैं यह सुनिश्चित करें कि मेरे निंदा की चेतावनी रहे हैं द्वारा देखा उपयोगकर्ताओं के पुस्तकालय भी कर रहे हैं जो निम्न सर्वोत्तम प्रथाओं को परिभाषित करने और अपने स्वयं निर्भरता इंटरफेस ।

1

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

3

कि लगता है के बाद से तार्किक विधि के इंटरफेस नहीं किया गया है पदावनत. जोड़ने Deprecated: लाइन इंटरफेस करने के लिए समारोह के साथ मदद कर सकता है इस मामले में (परीक्षण नहीं किया है, के बाद से VSCode नहीं है, यह अभी तक).

// MyInterface specifies a single function that we require from a dependency
type MyInterface interface {
    // Deprecated: use YourFunc
    MyFunc() string
}

इस मामले में, क्योंकि इंटरफ़ेस केवल 1 समारोह आप चाहिए पदावनत पूरी बात. जो मुझे पता है के द्वारा समर्थित है godoc/pkg.जाना है.देव, ले Queryer उदाहरण के लिए.

// MyInterface specifies a single function that we require from a dependency
// Deprecated: use YourInterface
type MyInterface interface {
    MyFunc() string
}
2021-11-22 21:18:36

एक कोर के पहलुओं का सवाल है, हालांकि है, "एक पुस्तकालय के रूप में मेंटेनर, मैं कैसे कर सकते हैं यह सुनिश्चित मेरी निंदा नोटिस द्वारा देखा जाता है अंत उपयोगकर्ताओं?" पुस्तकालय मेंटेनर पर कोई नियंत्रण नहीं है उपयोगकर्ता इंटरफ़ेस परिभाषाओं, तो वे तक पहुँच नहीं कर सकते में जोड़ें निंदा की चेतावनी वहाँ.
Brad Johnson

यह मुझे अजीब लगता है कि एक पुस्तकालय प्रदान करता है एक संरचना और उपयोगकर्ता एक इंटरफेस प्रदान करता है जो संरचना के पुस्तकालय को लागू करता है. अगर यह परिदृश्य आप के बारे में चिंतित हैं, यह होगा किया जा करने के लिए होशियार deprecate अपनी पूरी संरचना है, जो होना चाहिए का कारण होना चाहिए v = MyStruct{} बनने के लिए के माध्यम से त्रस्त
caveman

"यह मुझे अजीब लगता है कि एक पुस्तकालय प्रदान करता है एक संरचना और उपयोगकर्ता एक इंटरफेस प्रदान करता है..." नहीं है कि क्या इंटरफ़ेस पृथक्करण के सिद्धांत को प्रोत्साहित करती है?
Brad Johnson

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

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

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

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

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

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