यहाँ 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)
}