当前位置: 首页 > web >正文

Golang中集合相关的库

一切编程语言的底层结构都是数组,其它复杂数据结构如Map, Stack,Heap和Queue都是基于数组建立起来的。

Go语言主流工具库推荐(含常用数据结构实现)

以下是目前Go生态中最主流且活跃的工具库,包含队列、栈、优先级队列等常用数据结构的封装:

1. 标准库container

Go标准库中已经提供了部分基础数据结构:

import ("container/heap"  // 优先级队列(堆)"container/list"  // 双向链表(可作队列/栈)"container/ring"  // 环形链表
)

使用示例

// 优先级队列(最小堆)
type IntHeap []int
func (h IntHeap) Len() int           { return len(h) }
func (h IntHeap) Less(i, j int) bool { return h[i] < h[j] }
func (h IntHeap) Swap(i, j int)      { h[i], h[j] = h[j], h[i] }
func (h *IntHeap) Push(x any)        { *h = append(*h, x.(int)) }
func (h *IntHeap) Pop() any {old := *hn := len(old)x := old[n-1]*h = old[0 : n-1]return x
}// 使用
h := &IntHeap{2, 1, 5}
heap.Init(h)
heap.Push(h, 3)

2. 第三方优秀库

(1) gods ★12k+

最全面的Go数据结构库,包含:

  • 列表(List)
  • 栈(Stack)
  • 队列(Queue/Deque)
  • 优先级队列(PriorityQueue)
  • 集合(Set)
  • 字典(Map)
  • 树(Tree/BTree/AVLTree/RedBlackTree)
  • 图(Graph)
import "github.com/emirpasic/gods/stacks/linkedliststack"stack := linkedliststack.New()
stack.Push(1)
stack.Push(2)
val, _ := stack.Pop() // 2

(2) go-datastructures ★7k+

来自Workiva的高性能数据结构库:

  • 先进先出队列(FIFO Queue)
  • 优先级队列(Priority Queue)
  • 并发安全队列(ThreadSafeQueue)
  • 布隆过滤器(Bloom Filter)
  • 跳表(Skip List)
  • 区间树(Interval Tree)
import "github.com/Workiva/go-datastructures/queue"q := queue.New(10)
q.Put("item")
item, _ := q.Get() // "item"

(3) golang-set ★3.5k+

专精集合操作:

  • 线程安全集合
  • 并集/交集/差集运算
  • 支持泛型
import mapset "github.com/deckarep/golang-set/v2"set := mapset.NewSet[string]()
set.Add("apple")
set.Contains("apple") // true

(4) go-collections ★1k+

现代化泛型集合库:

  • 链表(LinkedList)
  • 字典(Dictionary)
  • 堆(Heap)
  • 栈(Stack)
  • 队列(Queue)
  • 不可变集合(Immutable)
import "github.com/samber/go-collections/stack"s := stack.NewStack[int]()
s.Push(42)
val := s.Pop() // 42

3. 并发安全数据结构

(1) concurrent-map ★3k+

import cmap "github.com/orcaman/concurrent-map/v2"m := cmap.New[string]()
m.Set("key", "value")
val, _ := m.Get("key") // "value"

(2) go-concurrent

提供并发控制原语:

  • 限流器(Rate Limiter)
  • 熔断器(Circuit Breaker)
  • 工作池(Worker Pool)

4. 特殊数据结构

(1) roaring ★2k+

位图(Bitmap)高效实现

(2) hyperloglog ★800+

基数估计数据结构

选择建议

  1. 简单需求:优先使用标准库 container
  2. 全面数据结构:选择 godsgo-datastructures
  3. 生产环境:考虑成熟度高的 godsgo-datastructures
  4. 泛型支持:选择 go-collections 或标准库泛型实现
  5. 并发场景:使用 concurrent-map 等专门库

性能对比(仅供参考)

数据结构标准库godsgo-datastructures
队列list快30%快50%(并发安全)
heap相当快20%
集合极快(位图实现)

这些库都有良好的文档和活跃的社区支持,可以根据项目需求选择合适的工具库。

http://www.xdnf.cn/news/4819.html

相关文章:

  • C++ 手写一个内存池
  • ollama学习-使用部署Qwen3大模型
  • 从易发性分析到灾后规划,AI大模型如何颠覆传统地质灾害防治?
  • 电厂参与全球能源效率排名的方法
  • llama.cpp win10系统无法运行,也不报错解决方案
  • NHANES指标推荐:NfL
  • 如何编写软件概要设计文档?
  • 【行业深度解析】什么是马甲包?
  • LinkList 的底层数据结构及优缺点
  • 深入理解操作系统:从基础概念到核心管理
  • 2025年排名前十进销存软件大测评
  • 12. 原生测试框架Unittest的后置处理方法的使用
  • 从零到精通:GoFrame ORM 使用指南 - 特性、实践与经验分享
  • 制作一款打飞机游戏41:敌机拖拽
  • 解析小米大模型MiMo:解锁语言模型推理潜力
  • C++核心概念全解析:从析构函数到运算符重载的深度指南
  • 「Mac畅玩AIGC与多模态25」开发篇21 - 用户画像生成与摘要输出工作流示例
  • 【大模型面试每日一题】Day 12:梯度裁剪(Gradient Clipping)的作用是什么?在Transformer中哪些场景下尤为重要?
  • 什么是采购供应链管理要点,如何实现降本增效目标
  • NetSuite 如何得到所有Item最近一次采购订单的货品单价?
  • 【动手学大模型开发 18】使用LangChian构建检索问答链(RAG)
  • 电梯称重控制仪功能与绳头板安装(客梯、货梯)关联性分析
  • 机器学习笔记——特征工程
  • Android智能体开发框架-架构文档
  • 微信小程序执行C语言库的详细方案
  • OSCP备战-kioptrix level _2详细分析
  • 11-GBase 8s 事务型数据库 管理员常用命令
  • 10.王道_HTTP
  • 数据中台-数据实施服务常用工具组件-(续)
  • 977.有序数组的平方