यदि आप अपने डेटा को स्टोर करने के लिए [] uint64 टुकड़ा का उपयोग करते हैं, तो शून्य टुकड़ा खाली बिटसेट के रूप में कार्य कर सकता है। असल में एक नील स्लाइस में शामिल होने से आपके लिए एक नई सरणी आवंटित होती है, हालांकि भाषा विशिष्टता उस गारंटी की प्रतीत नहीं होती है। उस तरह के सेटअप के साथ, नया (बिटसेट) तत्काल उपयोग योग्य होगा। उदाहरण:
bitset.go:
package bitset
const size = 64
type bits uint64
// BitSet is a set of bits that can be set, cleared and queried.
type BitSet []bits
// Set ensures that the given bit is set in the BitSet.
func (s *BitSet) Set(i uint) {
if len(*s) < int(i/size+1) {
r := make([]bits, i/size+1)
copy(r, *s)
*s = r
}
(*s)[i/size] |= 1 << (i % size)
}
// Clear ensures that the given bit is cleared (not set) in the BitSet.
func (s *BitSet) Clear(i uint) {
if len(*s) >= int(i/size+1) {
(*s)[i/size] &^= 1 << (i % size)
}
}
// IsSet returns true if the given bit is set, false if it is cleared.
func (s *BitSet) IsSet(i uint) bool {
return (*s)[i/size]&(1<<(i%size)) != 0
}
bitset_test.go:
package bitset
import "fmt"
func ExampleBitSet() {
s := new(BitSet)
s.Set(13)
s.Set(45)
s.Clear(13)
fmt.Printf("s.IsSet(13) = %t; s.IsSet(45) = %t; s.IsSet(30) = %t\n",
s.IsSet(13), s.IsSet(45), s.IsSet(30))
// Output: s.IsSet(13) = false; s.IsSet(45) = true; s.IsSet(30) = false
}
मैं इस समाधान से पूरी तरह से सहमत नहीं हूं। मुझे लगता है कि एक बिटसेट एक इंटरफ़ेस होने के लिए बहुत विशिष्ट है।यह आपको अलग-अलग बिट्ससेट्स की अनुमति देता है जो एक ही इंटरफ़ेस को लागू करते हैं, लेकिन क्या आपको वास्तव में ऐसी चीज़ की आवश्यकता है? ऐसा लगता है कि आप शायद एक बिटसेट कार्यान्वयन के साथ आ सकते हैं जो कि किसी भी उपयोग के लिए अच्छी तरह से काम करेगा और हमेशा इसका उपयोग करें। कई कार्यान्वयन संभवतः लोगों को भ्रमित कर देगा। –
जब आपको किसी अन्य कार्यान्वयन की आवश्यकता होती है तो बहुत सारे मामले होते हैं: बड़ी अतिरिक्त बिटसेट, वितरित/लेनदेन संबंधी बिटसेट, वर्चुअल बिटसेट (कुछ सेटिंग को साफ़ करना/साफ़ करना) और इसी तरह। –
मुझे लगता है कि गो में ऑब्जेक्ट प्रारंभ करने के लिए कोई समान तरीका नहीं है। :( नया (बिटसेट), बिटसेट .New(), न्यूबिटसेट(), ... वे कैसे संबंधित हैं? –