# 5 数据结构

在上一章中，我们讨论了可以通过`struct`关键字定义的组合类型，正则表达式，模式匹配，元组，`runes`，字符串，`unicode`和`strings`包，之后我们开发了一个简单的`key-value`存储。但是有时候编程语言提供的这些结构不适合一些特定的问题。有些时候我们需要自己创建的数据结构，以便以准确，专业的方式去存储，搜索，接收数据。因此，本章将介绍在Go中开发和使用众所周知的数据结构，包括二叉树，链表，散列表，堆栈和队列以及了解它们的优点。由于没有比图像更好地描述数据结构，因此本章将会看到许多图解！本章最后一部分将讨论随机数的生成，它将会帮你生成难以猜测的密码！下面是本章的内容概览：

* 图和节点
* 分析算法复杂度
* Go的二叉树
* Go的哈希表
* Go的链表
* Go的双端链表
* Go的队列
* Go的栈
* Go标准库`container`包提供的数据结构
* Go生成随机数
* 构建随机字符串用作难以破解的密码
