Menu
CoddyTech
学习路径

Go 数据结构与算法

Go 只提供切片和映射,其余的都交给你:没有栈、队列或集合类型,container/heap 里的堆在你实现 heap.Interface 之前什么也做不了。在这条路径中,你会用结构体和指针在 Go 里亲手实现每一种数据结构,再用它们做排序、递归和图搜索,最后完成自动评分的面试题。全部免费,在浏览器中学习,大多数课程都有证书。

377 节课284 个挑战702 道测验题

Go 数据结构与算法,循序渐进

38 门课程377 节课284 个挑战702 道测验题

每一步都由 Coddy 现有的几门课程组成,每个“开始”按钮都会以 Go 打开课程。还没有 Go 版本的三门课程列在步骤之后。

  1. 1
    开始这一步开始栈、队列、二叉树、哈希表和链表,每种都先用 Go 从零实现,再用来解决问题。学完后,用切片当栈、用映射当集合,就成了你能讲清理由的选择,而 Go 没有的队列类型,你也已经亲手写过。开始
  2. 2
    开始这一步开始双向链表、堆和优先队列、字典树、图,以及自平衡的 AVL 树。其中第一个已经有现成的 container/list;学完这一步,heap.Interface 的五个方法就讲得通了,因为你已经亲手实现过堆,而 Go 从未提供的平衡树,你也能自己写出来。开始
  3. 3
    开始这一步开始冒泡、选择、插入、归并、快速、堆、计数和基数排序,用 Go 编写,并在可视化工具中观察运行过程。从 Go 1.19 起,sort.Slice 使用模式消除快速排序(pdqsort),slices.Sort 也一样,而且两者都不稳定,所以才有 sort.SliceStable;学完这一步,你就明白这些词分别是什么意思。开始
  4. 4
    开始这一步开始用 Go 完成递归挑战。goroutine 的栈一开始很小,按需增长,所以几千层深的递归也很少溢出。但缺少基准情况仍然会撞到上限(64 位系统默认 1 GB 栈),并以致命错误结束,而不只是程序变慢。动态规划和位运算列在步骤之后,因为它们用 Python 和 C++ 讲授。开始专属页面
  5. 5
    开始这一步开始用 Go 实现广度优先搜索和深度优先搜索、Dijkstra、Bellman-Ford、拓扑排序、Kruskal 和 Prim,基于你在第二步构建的图。在 Go 中,Dijkstra 的优先队列就是在你自定义的切片类型上使用 container/heap:也就是第二步的堆,藏在一个接口后面。开始
  6. 6
你将获得
学编程所需的一切

在实践中学习

编写真实代码、查询数据库、搭建网站、掌握 AI 提示词。我们的互动课程涵盖现代开发者需要的每一项技能。

playground.js
代码编辑器
1const greeting = "Hello, Coddy!"
2function sayHi(name) {
3    return greeting + " " + name
4}
5
bottombar Collapse icon
测试 #1test Case Success icon
测试 #2test Case Success icon
测试 #3test Case Failure icon
输入
"Alex"
输出
"Hello, Coddy! Alex"

打造你的连胜

坚持下去,看着自己不断进步!记录每天的编程习惯,用冻结天数保护连胜,每天打卡都能赢取奖励。

12 天连胜

明天再来,保持你的连胜!

fire Filled icon
left icon

January 2026

right icon

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

21

22

23

24

25

26

27

28

29

30

product Double Or Nothing icon

加倍或归零

第 5 天,共 7 天

fire Freeze icon

连胜冻结

2 left

随时随地写代码

随时随地继续你的编程学习旅程!无需配置,无需下载:打开就能写代码。支持 iOS、Android 和 Web,评分高达 4.9 星。

Python
7连胜
250分数
5能量
变量
journey Hex Done Base iconjourney Hex Done Shadow iconjourney Hex Done Top iconjourney Lesson Done icon
journey Path Right Done icon
journey Hex Done Base iconjourney Hex Done Shadow iconjourney Hex Done Top iconjourney Lesson Done icon
journey Path Left Done icon
journey Hex Active Base iconjourney Hex Active Shadow iconjourney Hex Active Top iconjourney Lesson Theory Challenge icon
继续
journey Path Right icon
journey Hex Locked Base iconjourney Hex Locked Shadow iconjourney Hex Locked Top iconjourney Lesson Theory Challenge icon
journey Path Left icon
journey Hex Locked Base iconjourney Hex Locked Shadow iconjourney Hex Locked Top iconjourney Lesson All icon
学习旅程
目标
排行榜
个人主页
4.9
星星星星星
评分

你并不孤单

在全球排行榜上一较高下,邀请好友赢取奖励,为彼此的成就喝彩。和好友一起编程更有趣!

挑战者联赛
挑战者联赛前 7 名晋级
leaderboard First icon1
avatar 1 icon
fire Filled icon
Alex7+ Days
2840
leaderboard Second icon2
avatar 2 icon
fire Filled icon
Jordan7+ Days
2650
leaderboard Third icon3
avatar 3 icon
fire Filled icon
Sam7+ Days
2420
4
avatar 4 icon
Casey
2180
5
avatar placeholder icon
fire Filled icon
Morgan7+ Days
1950
leaderboard Arrow Up icon晋级区leaderboard Arrow Up icon

多种学习方式

阅读、收听、自我测验、问 AI,或者查阅学过的任何内容。每节课都配合你的节奏。

变量入门
音频

变量是一个有名字的容器,用来存储值,方便你在程序后面引用。

在 Python 中,创建变量只需写下名字、一个等号,再写上要存储的值。

值可以随时间变化。给这个名字重新赋值,它就会指向新的值。

1xSarah

获得证书

每完成一门课程都能获得证书。把证书添加到你的 LinkedIn 个人资料和简历中,向雇主展示你的编程能力。

Coddy结业证书
兹证明张三已成功完成
python iconPython 基础
已验证
日期2026年1月
LinkedIn添加到 LinkedIn

为什么在 Coddy 上用 Go 学数据结构与算法

  • Go 留给你的那些数据结构。Go 内置了切片和映射,仅此而已:栈是一个你用 append 追加、再重新切片的切片,集合是 map[T]struct{},队列类型和树则完全没有。知道如何写出缺少的结构,以及每个切片操作的开销,本身就是掌握 Go 的一部分。
  • 结构体和指针,没有任何隐藏。Go 没有类:节点就是一个带有指向下一个节点指针的 struct,方法挂在类型上。链表或树看起来就是它本来的样子,泛型(Go 1.18 起)让它适用于任何元素类型,而垃圾回收意味着你不需要管理 malloc 或 free。
  • 几乎整条路径都用 Go。每种数据结构、排序、图算法、递归挑战和面试题包都用 Go 讲授。有三门课用其他语言讲授,列在步骤之后,各附链接:动态规划和 Python 面试系列用 Python,位运算用 C++。从 Go 读位运算很自然,因为 Go 也有 C++ 的 &、|、^、<< 和 >>,按位取反则写作 ^x。
  • 像面试一样评分。每节课都以一道 Go 挑战结束,由测试用例检查。没通过时,Bugsy 会阅读你的代码,引导你找到修复方法,而不是直接给出答案。大多数课程提供免费证书,每张证书都可以通过专属 URL 验证。

关于用 Go 学数据结构与算法的常见问题

Go 适合学习数据结构与算法吗?

适合。Go 编译成高效的原生代码,语法足够精简,你读到的大部分内容就是算法本身,而泛型(Go 1.18 起)让带类型的栈或堆可以复用。代价是标准库比较精简:除了切片、映射、container/list 和 container/heap,其他结构都要你自己写,而在学习路径上,这正是目的所在。如今大量云基础设施都用 Go 编写,包括 Docker 和 Kubernetes,这让它自然成为后端岗位的面试语言。

Go 的哪些类型和包对应哪些数据结构?

切片是动态数组,配合 append 和重新切片也可以当作栈;映射是哈希表,map[T]struct{} 是惯用的集合写法;container/list 是双向链表;container/heap 可以在任何实现了 heap.Interface 的类型上运行二叉堆。Go 没有队列类型、树、字典树或图,这些要你在第一步和第二步中自己实现。

Go 的 container/heap 是怎么工作的?

你需要在自己定义的切片类型上实现 heap.Interface:来自 sort.Interface 的 Len、Less 和 Swap,再加上只负责在切片末尾追加和删除元素的 Push 和 Pop。然后调用包函数 heap.Push 和 heap.Pop,而不是你自己的方法,由它们完成上浮和下沉,保持堆的顺序。在你亲手写过一个堆之前,这套写法读起来很别扭,而第二步正是让你写堆的地方。

为什么每次遍历 Go 的 map,顺序都不一样?

因为 Go 故意随机化了 map 的迭代顺序,这样就没有程序会依赖它。在任何语言中,哈希表都没有有意义的顺序,Go 只是确保你注意到这一点。当顺序很重要时,比如测试要比较的输出,就把键收集到一个切片里再排序,或者在 map 旁边维护一个切片。

这条路径中哪些课程不是用 Go 讲授的?

有三门:动态规划和 Python 面试系列用 Python 讲授,位运算用 C++ 讲授。它们列在步骤之后,每门都附有链接,会以对应的语言打开。在 Go 中,备忘录表就是一个切片或映射,而且 Go 还多了一个 C++ 没有的位运算符:&^,即“与非”,它会把左操作数中、右操作数为 1 的每一位清零。

开始这条路径前需要先会 Go 吗?

至少要了解结构体、指针、切片、映射和方法;泛型会有帮助,也可以边学边掌握。如果这些对你来说还很陌生,可以先学 Coddy 免费的 Go 课程,学完后再从这条路径继续。

完成数据结构与算法路径能获得证书吗?

能。完成每一步,你就能获得整条数据结构与算法路径的一张免费证书。证书会列出你沿途完成的每门课程,并链接到每门课程各自的证书,任何人都能核实上面列出的每项技能。你可以把它添加到 LinkedIn 个人资料。这是 Coddy 颁发的结业证书,不是经过认证的学历资格。

其他学习路径

同样的课程,按不同职业方向编排。进度会保留:在一条路径上完成的课程,在所有包含它的路径上都算完成。

全部学习路径
Coddy 编程语言插图

免费开始数据结构与算法路径

开始学习