为什么Go没有内置的集合(set)数据结构以及如何实现它?
大家好!我是Go新手,从Python转过来,对缺少内置的集合(set)数据类型感到非常困惑。在Python中,我经常使用set来快速检查元素的唯一性、从切片中删除重复项以及检查交集。例如:
```go
// 我如何在Go中做到这一点?
uniqueNames := []string{}
seen := set() // 没有这样的东西!
for _, name := range names {
if !seen.Contains(name) {
seen.Add(name)
uniqueNames = append(uniqueNames, name)
}
}
```
我知道可以使用map[string]bool或map[string]struct{},但这看起来像是一种变通方法。为什么Go开发者没有在标准库中添加一个正常的set?毕竟这是一个基本的数据结构,几乎所有现代语言都有。
也许我遗漏了什么?有没有一种惯用的方式在Go中处理集合而不需要重复造轮子?还是每次都需要自己实现?感谢提供代码示例和哲学解释。