Golang集合类型实现
在Golang中,常用的集合类型有哪些?它们各自的特点和适用场景是什么?比如slice、map和channel这些内置类型,在实际开发中应该如何选择?能否举例说明它们的性能差异和使用注意事项?
2 回复
Golang常用集合类型:
- map:哈希表,键值对存储
- slice:动态数组,基于数组封装
- array:固定长度数组
- 通过标准库container包可实现堆、链表等
特点:类型安全,内存管理高效,并发安全需配合sync包。
更多关于Golang集合类型实现的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go语言中,集合通常通过map实现,因为Go没有内置的集合类型。map的键具有唯一性,可以模拟集合行为。以下是常见操作示例:
1. 创建集合
使用map[T]bool或map[T]struct{}(更节省内存):
set := make(map[string]bool) // 方法1
// 或
set := map[string]struct{}{} // 方法2(推荐,空结构体不占内存)
2. 添加元素
set["apple"] = true
// 或
set["banana"] = struct{}{}
3. 检查元素是否存在
if _, exists := set["apple"]; exists {
fmt.Println("存在")
}
4. 删除元素
delete(set, "apple")
5. 获取集合大小
size := len(set)
6. 遍历集合
for k := range set {
fmt.Println(k)
}
完整示例
func main() {
set := make(map[string]struct{})
// 添加
set["a"] = struct{}{}
set["b"] = struct{}{}
// 检查
if _, exists := set["a"]; exists {
fmt.Println("a exists")
}
// 删除
delete(set, "b")
// 遍历
for k := range set {
fmt.Println(k) // 输出: a
}
}
注意:如果需要有序集合,需结合切片维护顺序,或使用第三方库(如github.com/deckarep/golang-set)。

