التحقق من سلامة الواجهة
تحقق من الامتثال للواجهة أثناء وقت التجميع. يشمل هذا:
- التحقق من النوع المصدر الذي ينفذ واجهة معينة كجزء من واجهة API
- أن أنواع (المصدرة وغير المصدرة) التي تنفذ نفس الواجهة تنتمي إلى مجموعة الأنواع المنفذة
- أن أي سيناريوهات تنتهك تحقق الواجهة ستؤدي إلى إنهاء التجميع وإخطار المستخدم
ملحق: النقاط الثلاثة أعلاه هي آليات فحص الواجهة في المترجم. الفكرة العامة هي أن الأخطاء في استخدام الواجهة ستُبلغ أثناء وقت التجميع. لذا، يمكن استخدام هذه الآلية للكشف عن بعض المشاكل أثناء وقت التجميع.
النهج غير الموصى به:
// إذا لم ينفذ Handler واجهة http.Handler، سيحدث خطأ أثناء تشغيل البرنامج
type Handler struct {
// ...
}
func (h *Handler) ServeHTTP(
w http.ResponseWriter,
r *http.Request,
) {
...
}
النهج الموصى به:
type Handler struct {
// ...
}
// تُستخدم لتشغيل آلية التحقق من سلامة الواجهة أثناء وقت التجميع
// إذا لم ينفذ Handler واجهة 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,
) {
// ...
}