golang 布隆过滤器
源码分析
结构体定义,m和k,通过README可以知道,
m是数组集合大小,而k是hash函数个数
// member of a set.
type BloomFilter struct {
m uint
k uint
b *bitset.BitSet
}
// New creates a new Bloom filter with _m_ bits and _k_ hashing functions
// We force _m_ and _k_ to be at least one to avoid panics.
func New(m uint, k uint) *BloomFilter {
return &BloomFilter{max(1, m), max(1, k), bitset.New(m)}
}
这里使用了bitset作为数组实现
结构体定义:
// A BitSet is a set of bits. The zero value of a BitSet is an empty set of length 0.
type BitSet struct {
length uint
set []uint64
}
// New creates a new BitSet with a hint that length bits will be required
func New(length uint) (bset *BitSet) {
defer recover ....
bset = &BitSet{
length,
make([]uint