इंटरफ़ेस समझौता सत्यापन
कंपाइल समय पर इंटरफ़ेस का अनुपालन सत्यापित करें। इसमें शामिल है:
- इंटरफेस API का हिस्सा के रूप में एक विशिष्ट इंटरफेस को अमल करने वाले निर्यातित प्रकार की जांच
- संयोजित प्रकारों (निर्यात और अनिर्यात) में से उसी इंटरफेस को अमल करने वाले प्रकारों का संग्रह
- इंटरफेस समझौता सत्यापन के लिए विफलता वाले किसी भी स्थिति से कंपाइलेशन को समाप्त कर और उपयोक्ता को सूचित करें
अतिरिक्त: उपर्युक्त तीन बिंदु कंपाइलर की इंटरफेस जांच तंत्र हैं। सामान्य विचार यह है कि इंटरफेस का उपयोग करते समय दोषों की सूचना कंपाइल समय पर दी जाएगी। इसलिए, यह तंत्र कुछ समस्याओं को कंपाइल समय पर प्रकट करने के लिए उपयोग किया जा सकता है।
अनुशंसित दृष्टिकोण:
// यदि हैंडलर http.Handler को अमल नहीं करता है, तो ध्रुवीयता समय पर त्रुटि होगी
type Handler struct {
// ...
}
func (h *Handler) ServeHTTP(
w http.ResponseWriter,
r *http.Request,
) {
...
}
सिफ़र दृष्टिकोण:
type Handler struct {
// ...
}
// इंटरफ़ेस समझौता सत्यापन तंत्र को कंपाइल समय पर प्रेरित करने के लिए उपयोग होता है
// यदि हैंडलर http.Handler को अमल नहीं करता है, तो ध्रुवीयता समय पर त्रुटि होगी
var _ http.Handler = (*Handler)(nil)
func (h *Handler) ServeHTTP(
w http.ResponseWriter,
r *http.Request,
) {
// ...
}
यदि *Handler
http.Handler
के इंटरफेस से मेल नहीं खाता है, तो वाक्य var _ http.Handler = (*Handler)(nil)
को कंपाइल नहीं किया जाएगा।
स्वीकृत प्रकार का दायरा लागू करने के लिए वाक्य का दाईं तरफ का हिस्सा आधारित प्रकार का शून्य मान होना चाहिए। उग्रवाणी प्रकार (जैसे *Handler
), स्लाइस, और मानचित्रों के लिए यह nil
है; संरचना प्रकारों के लिए, यह एक खाली संरचना है।
type LogHandler struct {
h http.Handler
log *zap.Logger
}
var _ http.Handler = LogHandler{}
func (h LogHandler) ServeHTTP(
w http.ResponseWriter,
r *http.Request,
) {
// ...
}