यहाँ 3 और सुझाव या तकनीकें दी गई हैं:
एक अतिरिक्त क्षेत्र के साथ
आप यह बताने के लिए एक अतिरिक्त फ़ील्ड जोड़ सकते हैं कि क्या संरचना आबाद हो गई है या वह खाली है। मैंने जानबूझकर इसे नाम दिया है ready
और empty
इसलिए नहीं कि शून्य का मान bool
है false
, इसलिए यदि आप एक नया ढांचा बनाते हैं जैसे कि Session{}
इसका ready
क्षेत्र अपने आप हो जाएगा false
और यह आपको सच बताएगा: कि संरचना अभी तक तैयार नहीं है (यह खाली है)।
type Session struct {
ready bool
playerId string
beehive string
timestamp time.Time
}
जब आप संरचना को शुरू करते हैं, तो आपको सेट ready
करना होगा true
। आपकी isEmpty()
विधि की अब और आवश्यकता नहीं है (हालाँकि आप चाहें तो एक बना सकते हैं) क्योंकि आप केवल ready
क्षेत्र का परीक्षण कर सकते हैं ।
var s Session
if !s.ready {
// do stuff (populate s)
}
यह एक अतिरिक्त bool
क्षेत्र का महत्व बढ़ जाता है क्योंकि संरचना बड़ी हो जाती है या यदि इसमें ऐसे क्षेत्र होते हैं जो तुलनीय नहीं होते हैं (जैसे टुकड़ा, map
और फ़ंक्शन मान)।
मौजूदा क्षेत्र के शून्य मान का उपयोग करना
यह पिछले सुझाव के समान है, लेकिन यह मौजूदा फ़ील्ड के शून्य मान का उपयोग करता है जिसे तब माना जाता है जब संरचना खाली न हो। इस की प्रयोज्यता कार्यान्वयन पर निर्भर है।
उदाहरण के लिए यदि आपके उदाहरण में आपका playerId
स्थान रिक्त नहीं हो सकता है string
""
, तो आप इसका उपयोग यह जांचने के लिए कर सकते हैं कि क्या आपकी संरचना इस प्रकार रिक्त है:
var s Session
if s.playerId == "" {
// do stuff (populate s, give proper value to playerId)
}
इस मामले में इस जाँच को एक isEmpty()
विधि में शामिल करने लायक है क्योंकि यह जाँच कार्यान्वयन पर निर्भर है:
func (s Session) isEmpty() bool {
return s.playerId == ""
}
और इसका उपयोग करते हुए:
if s.isEmpty() {
// do stuff (populate s, give proper value to playerId)
}
अपनी संरचना के लिए पॉइंटर का उपयोग करें
दूसरा सुझाव आपकी संरचना के लिए एक सूचक का उपयोग करना है *Session
:। संकेत में nil
मान हो सकते हैं , इसलिए आप इसके लिए परीक्षण कर सकते हैं:
var s *Session
if s == nil {
s = new(Session)
// do stuff (populate s)
}