好的,以下是用Golang实现布隆过滤器的示例代码: ```go package main import ( "bufio" "fmt" "hash/fnv" "os" ) type BloomFilter struct { bitset []bool k uint64 } func NewBloomFilter(m uint64, k uint64) *BloomFilter { return &BloomFilter{make([]bool, m), k} } func (bf *BloomFilter) Add(s string) { for i := uint64(0); i < bf.k; i++ { h := fnv.New64a() h.Write([]byte(s)) index := h.Sum64() % uint64(len(bf.bitset)) bf.bitset[index] = true } } func (bf *BloomFilter) Contains(s string) bool { for i := uint64(0); i < bf.k; i++ { h := fnv.New64a() h.Write([]byte(s)) index := h.Sum64() % uint64(len(bf.bitset)) if !bf.bitset[index] { return false } } return true } func main() { bf := NewBloomFilter(10000, 3) // Add some strings to the Bloom filter bf.Add("apple") bf.Add("banana") bf.Add("orange") // Check if some strings are in the Bloom filter fmt.Println(bf.Contains("apple")) // true fmt.Println(bf.Contains("banana")) // true fmt.Println(bf.Contains("orange")) // true fmt.Println(bf.Contains("grape")) // false fmt.Println(bf.Contains("peach")) // false fmt.Println(bf.Contains("pineapple")) // false // Read some strings from a file and check if they are in the Bloom filter file, _ := os.Open("words.txt") defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { word := scanner.Text() if bf.Contains(word) { fmt.Printf("%s may be in the set\n", word) } } } ``` 以上是一个简单的布隆过滤器实现,它使用了FNV-1a哈希算法来计算字符串的哈希值,并将哈希值映射到一个布隆过滤器的位数组中,如果位数组中的所有位都被置位了,那么就认为这个字符串可能在集合中。注意,这个实现中的位数组大小是固定的,如果集合中的元素数量超过了位数组的大小,那么误判率就会增加。