# GolangStudy
本项目旨在指导程序员们如何从基础开始系统的学习 Go 语言,并学习开发时所需知识点。
Go 是一门非常容易上手的语言,语法简洁,代码易读,如果你有常用语言的基础,那看一本[Go 语言圣经](https://docs.hacknode.org/gopl-zh/index.html)后便可上手开发业务代码。
本项目不是博客,一个问题不会讲的特别细致,如果想要更加深入的了解某个知识点的话,建议使用搜索引擎去搜索经典博客加深理解,项目中也会推荐一些好的文章供参考。
本项目更加看重的是对于知识点系统的一个总结,能够通过一句话,一张思维导图来把一类知识进行讲解,这样在面试前把所有的思维导图都过一遍就快的吸收知识点,平时空余的时候拿出思维导图进行复习也能加深理解。
作者通过该学习笔记,拿到过腾讯云,金山办公,青藤云,神州数码等云相关企业 offer,工作岗位是 Golang 服务端开发。
## 如何利用思维导图学习
对于一个新的知识点,我一般是这样结合思维导图来学习的:
1. 找到一个比较详细的资料,例如博客,书籍等,如果在 baidu 上面搜不到易读的内容(可能性较大),可以尝试用 bing 看看英文的资料,能够翻墙的可以使用 google。
2. 通读全文,将每一个陌生的专业词汇记录下来,用于更进一步的学习,逐步发散,逐渐扩充自己的知识库。
3. 捋清文章脉络,找到每个章节的核心概要,将概要记录到思维导图子标题上。
4. 遍历每个概要,逐步下沉概要里的各个关键知识点,记录到思维导图。
5. 比对文章内容和思维导图,确认没有遗漏的知识点。
6. 经常回顾记录的思维导图,用于加深知识点的记忆。
7. 用持续进步的角度审视所记录的思维导图,思维导图不是标准答案,只是你对一个知识点的总结,不一定是绝对正确的,可以持续优化,持续总结出更好的内容。
8. 思维是抽象的,网状的,不是线性的,很多较难的知识点如果用一句线性的语句来描述会非常的难以理解,所以要将重难点内容解析成思维导图,要习惯这种思维模式,这样才算真正的理解了思维导图的作用。
## Golang 学习路线
[GolangStudy系列|学习方法|Golang学习路线](https://mp.weixin.qq.com/s/o1KxHuHyr32F7pQyKNLedw)
![Golang-学习路线.png](https://cnymw.github.io/GolangStudy/docs/Golang-学习路线/Golang-学习路线.png)
## Golang 学习目录
<!-- ALL-TOPICS-LIST:START -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<center>
<table>
<tr>
<td align="center"><a href="#Golang语言"><img src="docs/img/Go.png" width="75px;" height="75px;" alt="go"/><br /><b>Golang</b></a></td>
<td align="center"><a href="#linux"><img src="docs/img/linux.png" width="75px;" height="75px;" alt="Linux"/><br /><b>Linux</b></a></td>
<td align="center"><a href="#数据结构"><img src="docs/img/data-structure.png" width="75px;" height="75px;" alt="数据结构"/><br /><b>数据结构</b></a></td>
<td align="center"><a href="#算法"><img src="docs/img/algorithm.jpeg" width="75px;" height="75px;" alt="算法"/><br /><b>算法</b></a></td>
<td align="center"><a href="#设计模式"><img src="docs/img/design-pattern.jpeg" width="75px;" height="75px;" alt="设计模式"/><br /><b>设计模式</b></a></td>
</tr>
<tr>
<td align="center"><a href="#网络"><img src="docs/img/network.png" width="75px;" height="75px;" alt="Network"/><br /><b>网络</b></a></td>
<td align="center"><a href="#Kubernetes"><img src="docs/img/kubernetes.png" width="75px;" height="75px;" alt="kubernetes"/><br /><b>Kubernetes</b></a></td>
<td align="center"><a href="#Docker"><img src="docs/img/docker.png" width="75px;" height="75px;" alt="Docker"/><br /><b>Docker</b></a></td>
<td align="center"><a href="#leetcode"><img src="docs/img/leetcode.png" width="75px;" height="75px;" alt="leetcode"/><br /><b>leetcode</b></a></td>
<td align="center"><a href="#kafka"><img src="docs/img/kafka.png" width="85px;" height="80px;" alt="Kafka"/><br /><b>Kafka</b></a></td>
</tr>
<tr>
<td align="center"><a href="#redis"><img src="docs/img/redis.png" width="75px;" height="75px;" alt="redis"/><br /><b>redis</b></a></td>
<td align="center"><a href="#mysql"><img src="docs/img/databases.png" width="75px;" height="75px;" alt="Databases"/><br /><b>mysql</b></a></td>
<td align="center"><a href="#elasticsearch"><img src="docs/img/elastic.png" width="75px;" height="75px;" alt="ElasticSearch"/><br /><b>Elastic</b></a></td>
</tr>
</table>
</center>
<!-- markdownlint-enable -->
<!-- prettier-ignore-end -->
<!-- ALL-TOPICS-LIST:END -->
---
## Golang语言
Golang 语言的学习可以分为以下方向:
- 基础:开发核心能力
- 高级机制:线程调度,垃圾回收等,进阶的面试经常会考
- 源码解读:对 Golang 加深理解,进阶开发有帮助
- 常用框架:对生产开发有帮助,可以简单了解下,在技术选型的时候可以快速做出判断
学习目录如下:
- 基础
- [GolangStudy系列|Golang学习|Golang入门](https://mp.weixin.qq.com/s/q0Cyucw02GQQAF898oPsqg)
- [GolangStudy系列|Golang学习|Golang程序结构](https://mp.weixin.qq.com/s/Gj6WJe_I1io1Dnxy7uEuXg)
- [GolangStudy系列|Golang学习|Golang基础数据类型](https://mp.weixin.qq.com/s/9bQ4a0YOm62GaUe6nQYPhA)
- [Golang 并发](/docs/go-并发.md)
- [Golang 接口](/docs/go-接口.md)
- [Golang 检测竞态条件](/docs/go-检测竞态条件.md)
- 进阶
- [Golang 调度](/docs/go-调度.md)
- [Golang 垃圾回收](/docs/go-垃圾回收.md)
- [Golang channel](/docs/go-channel/go-channel.md)
- [Golang 性能分析:pprof实战](https://blog.wolfogre.com/posts/go-ppof-practice/)
- 深入 Golang sdk 源码
- [Golang 源码解读 标识符](/docs/go-源码解读-标识符/go-源码解读-标识符.md)
- [Golang 源码解读 双向链表 list](/docs/go-源码解读-双向链表list/go-源码解读-双向链表list.md)
- [Golang 源码解读 程序分析pprof](/docs/go-源码解读-程序分析pprof.md)
- [Golang 源码解读 同步模块sync mutex](/docs/go-源码解读-同步sync-mutex.md)
- [Golang 源码解读 同步模块sync once](/docs/go-源码解读-同步sync-once.md)
- [Golang 源码解读 垃圾回收](/docs/go-源码解读-垃圾回收/go-源码解读-垃圾回收.md)
- [Golang 源码解读 channel](/docs/go-源码解读-channel/go-源码解读-channel.md)
- 拓展 zap
- [Golang 源码解读 高性能日志库 zap](/docs/go-zap.md)
- 拓展 grpool
- [Golang 源码解读 轻量级线程池 grpool](/docs/go-grpool.md)
- 面试题
- [Golang 有几种连接字符串的方法?](/docs/go-面试题-连接字符串方法/go-面试题-连接字符串方法.md)
---
## Kubernetes
Golang 常用在微服务,分布式场景,不经常用于较大的业务场景中。
常见的如开发一个微服务,部署到阿里/腾讯/华为云中,或者云原生自建的 Kubernetes 里,这个时候就需要学习并精通 Kubernetes 相关的知识。
很多企业在自建云,或者做云原生的转型,部署服务会逐渐的使用 Kubernetes,而放弃之前的物理机,虚拟机部署模式。所以面试的时候问到 Kubernetes 是比较常见的。
学习目录如下:
- [kubernetes.io 官方文档](https://kubernetes.io/zh-cn/)
- [Kubernetes 概述|视频学习|完整版](/docs/Kubernetes-概述/Kubernetes-概述.md)
- [Kubernetes 组件|视频学习|完整版](/docs/Kubernetes-组件/Kubernetes-组件.md)
- [Kubernetes 理解对象|视频学习|完整版](/docs/Kubernetes-理解对象/Kubernetes-理解对象.md)
- [Kubernetes 标签|视频学习|完整版](/docs/Kubernetes-标签/Kubernetes-标