ইন্টারফেস র্যাশনালিটি যাচাই

জড়োর্থমে ইন্টারফেসের অনুমানিত সামঞ্জস্যতা যাচাই করুন। এটা যাচাই করে:

  • ইন্টারফেস API এর একটি অংশ হিসাবে একটি নির্যাসিত টাইপটি যে ইন্টারফেস বহন করে
  • সমান ইন্টারফেস পালন করা টাইপগুলি (নির্যাসিত ও নির্যাসিত) পালন করে
  • যেকোনো পরিস্থিতি যা ইন্টারফেস র্যাশনালিটি চেক লঙ্ঘন করে তা প্রমাণ করে কোড যাচাইযুক্ত করুন এবং ব্যবহারকারীকে অবহিত করুন

অভ্যন্তরীণ: উপরের তিনটি পয়েন্ট হল কম্পাইলারের ইন্টারফেস চেকের মেকানিজম। সাধারণ ধারণা হল ইন্টারফেস ব্যবহারের ভুল গুলি কম্পাইল সময়ে প্রতিবেদন করা হবে। এই মেকানিজমটি প্রমাণ করার জন্য প্রতিবেদন হিসাবে কম্পাইল সময়ে কিছু সমস্যা প্রকাশ করা যাবে।

অনুমোদিত না অবস্থান:

// যদি হ্যান্ডলার http.Handler পালন না করে তাহলে একটি ভুল রানটাইমে ঘটবে
টাইপ Handler একটি ভুল {
  // ...
}
func (h *Handler) ServeHTTP(
  w http.ResponseWriter,
  r *http.Request,
) {
  ...
}

সুপারিশকৃত অবস্থান:

আরও দ্বারা Handler টাইপ {
  // ...
}
// কম্পাইল সময়ে ইন্টারফেস র্যাশনালিটি চেক মেকানিজম সুচালন করতে ব্যবহৃত
// যদি Handler http.Handler পালন না করে তাহলে কম্পাইলাইমে একটি ভুল আসবে
ভ্যার _ http.Handler = (*Handler)(nil)
func (h *Handler) ServeHTTP(
  w http.ResponseWriter,
  r *http.Request,
) {
  // ...
}

যদি *Handler http.Handler ইন্টারফেসের সাথে মেলে না, তাহলে বিবৃতি var _ http.Handler = (*Handler)(nil) কোডটি কম্পাইল হবে না।

অনুষ্ঠানের ডান দিকে অনুগ্রহপূর্বক অনুষ্ঠানের বিশ্বাসিত ধরণের সূচনা ডান পাওয়া উৎসাহিত করা উচিত। পয়েন্টার প্রকারের জন্য (যেমন, *Handler), স্লাইস, এবং ম্যাপ, এটা nil এ; জন্য স্থানীয় ধরণের জন্য এটা একটি ফাঁকা কোনও কাঠামো।

টাইপ LogHandler একটি ভুল {
  h   http.Handler
  লগ *zap.Logger
}
ভ্যার _ http.Handler = LogHandler{}
func (h LogHandler) ServeHTTP(
  w http.ResponseWriter,
  r *http.Request,
) {
  // ...
}