Avatar ·

为什么Go没有内置的集合(Set)数据类型以及如何实现它?

大家好!我是一名初学Go的开发者,从Python转过来,遇到了一个意想不到的问题。 在Python中,我经常使用`set()`来检查元素的唯一性、从列表中删除重复项以及快速检查成员资格。例如: ```python my_list = [1, 2, 2, 3, 3, 4] unique = set(my_list) # {1, 2, 3, 4} if 3 in unique: # O(1)检查 print("找到!") ``` 当我开始用Go编写代码时,我期望在标准库中找到类似的东西,但令我惊讶的是,既没有`Set`类型,也没有泛型(直到1.18版本)。我不得不编写一些权宜之计: ```go // 尝试1:使用map seen := make(map[int]bool) items := []int{1, 2, 2, 3, 3, 4} for _, v := range items { seen[v] = true } // 但这不方便——需要检查ok,代码冗长 ``` 我明白可以通过`map[T]struct{}`来模拟集合,但这看起来像是一种hack。为什么Go的开发者决定不在标准库中添加单独的`Set`类型?有没有什么...