校招准备Go的岗位的话,你首先基础要扎实,然后再搭配项目去练习,简历上也需要有2-3个实战项目才可以,下面是由字节的工程师总结出来的Go学习大纲,以及项目练习建议,可以先点赞收藏,后面跟着来学习哦!

下面这个由字节的工程师(2018-2021 字节跳动 Golang工程师、架构师 2021 至今 云原生架构师 在云原生与后端中间件领域有丰富经验,熟悉 Kubernetes、Docker、Istio、Apisix、MySQL、Redis 等多种后端技术。)总结出来的Go学习大纲

Go课程大纲


Golang 基础篇


历史和背景
● Golang 的发展历史和背景介绍
● Golang 的优势和应用场景

语法和数据类型
● Golang 的基本语法规则
● 常量和变量
● 数据类型 (整型、浮点型、复数、布尔型、字符串)
● 类型转换

数组、切片、映射
● 数组的定义和使用
● 切片的定义和使用
● 切片的增加、删除和修改
● 映射的定义和使用
● 映射的增加、删除和修改
流程控制语句
● 条件语句 (if、switch)
● 循环语句 (for)
● 跳转语句 (break、continue、goto)
函数和方法
● 函数的定义和使用
● 函数的参数和返回值
● 可变参数函数
● 方法的定义和使用
● 方法的接收器类型 (值接收器、指针接收器)
面向对象编程
● struct 和 method
● 什么是 struct,如何创建和使用它
● struct 的方法,如何定义和使用它
● 值接收器和指针接收器的区别
● 结构体的匿名字段
● interface、嵌套与组合
● 什么是 interface,如何定义和使用它
● interface 的嵌套和组合,如何实现和使用它
● 接口的类型转换和类型断言
● 继承与多态
● Golang 不支持传统的继承机制,但可以使用组合实现类似的效果
● 基于 interface 的多态实现

Golang 进阶篇


错误处理和异常机制
● panic 与 recover
● panic 和 recover 的作用和机制
● 如何正确地使用 panic 和 recover
● 常见 Golang 错误处理库
● errors 包
● log 包
● fmt 包
● http://github.com/pkg/errors 包
● 错误处理最佳实践
● 错误类型的设计和使用
● 错误处理的策略和技巧
● 错误处理的代码实践和经验
包管理和依赖管理
● 了解包的概念和作用
● 熟悉包的设计与封装规范
● 理解包的导入与导出规则
● 学习使用go modules进行包的管理
● 掌握依赖管理的基本概念与实践方法
并发编程和协程机制
● 了解并发编程的概念和优势
● 熟悉Goroutine的概念和使用方法
● 掌握Channel的概念和使用方法
● 理解Select语句的使用场景和应用方法
● 学习使用context进行上下文管理
● 掌握sync包的常用工具,如Mutex、WaitGroup、Cond等
内存管理和垃圾回收机制
● 理解Golang的内存管理机制
● 学习如何进行内存分配和释放
● 了解垃圾回收机制的基本原理和实现方式
● 掌握如何调整垃圾回收机制的参数进行优化

标准库和常用第三方库
● fmt包:格式化输入输出
● os包:操作系统接口
● io包:输入输出
● bufio包:缓冲输入输出
● net包:网络编程
● http包:HTTP客户端和服务器
● encoding/json包:JSON编解码
● time包:时间和日期处理
● sync包:并发编程
● ...
网络编程和IO操作
● TCP/IP协议栈基础知识
● OSI七层模型和TCP/IP四层模型
● TCP和UDP协议的区别和应用场景
● HTTP协议和HTTPS协议的区别和应用场景
socket编程
● socket概述和基本原理
● 套接字类型和地址族
● TCP套接字编程
● UDP套接字编程
● HTTP协议的套接字编程实现
加密和安全编程
● 加密基础知识
- 加密和解密
- 对称加密 vs 非对称加密
- 密钥和证书
- 数字签名
- SSL / TLS协议
● 常见加密算法与使用
- 对称加密算法:如AES和3DES
- 非对称加密算法:如RSA和ECC
- 哈希算法:如SHA256和MD5
- 数字签名算法:如DSA和ECDSA
数据结构
● 数组(Array)
● 栈(Stack)
● 队列(Queue)
● 链表(Linked List)
● 哈希表(Hash Table)
反射
● 反射概述
● 反射类型
● 获取Value和Type信息
● 反射值设置与获取
● 反射调用方法
性能优化技巧
● pprof、trace的使用方法
- 什么是pprof和trace
- 如何使用pprof和trace
- pprof和trace的常用命令和参数
- pprof和trace的输出分析和解读
● 性能优化技巧
- 内存分配和GC
- CPU利用率和并发锁竞争
- 系统调用和IO阻塞
- 减少内存分配
- 减少GC压力
- 减少锁竞争
- 减少系统调用和IO阻塞
- 并发编程优化

Web开发


介绍常见Web框架
● gin
● beego
路由和中间件
配置管理
● 配置文件解析
- 学习如何解析配置文件
- 支持不同的配置文件格式,如JSON、YAML、TOML等
- 学习如何使用标准库来解析配置文件
● viper
- 学习Viper库的基础概念和用法
- 理解如何使用Viper加载和解析配置文件
● godotenv
- 理解如何使用Godotenv库来读取环境变量
- 学习如何将环境变量加载到应用程序中
- 理解如何在不同的环境中使用环境变量,如开发、测试和生产
日志
● 常用日志库
● log:Golang标准库中提供的日志功能。尽管它非常基本,但它足够满足大部分的日志需求。
● logrus:功能强大的结构化日志记录库,提供了丰富的特性和可自定义的模块。
● zap:一个高性能、可扩展的日志库,可以在不影响程序性能的情况下打印出大量日志信息。
模板引擎
数据库编程
● MySQL
- MySQL 简介
- MySQL 基本操作
- 创建和删除数据库
- 创建和删除表
- 插入、更新和删除数据
- MySQL 驱动
- `database/sql` 包介绍
- `sql.DB` 和 `sql.Tx` 的使用
- `sqlx` 介绍
- `sqlx.DB` 和 `sqlx.Tx` 的使用
- `sqlx.NamedExec()` 和 `sqlx.Select()` 等方法使用
- `gorm` 介绍
- `gorm.DB` 和 `gorm.Tx` 的使用
- 模型定义和映射
- 查询构建器的使用
● Redis
- Redis 简介
- Redis 驱动
- `http://github.com/go-redis/redis` 包介绍
- `redis.Client` 和 `redis.Tx` 的使用
- `redis.Pipeliner` 的使用
- Redis 基本操作
- 字符串操作
- 哈希表操作
- 列表操作
- 集合操作
- 有序集合操作
- Redis 分布式锁
● MongoDB
- MongoDB 简介
- MongoDB 驱动
- `http://go.mongodb.org/mongo-driver/mongo` 包介绍
- `mongo.Client` 和 `mongo.Session` 的使用
- MongoDB 基本操作
- 插入、更新和删除文档
- 查询文档
- 相等条件查询
- 范围条件查询
- 正则表达式查询
- 排序和分页查询
- 聚合查询
- 索引的使用

单元测试
● 什么是单元测试
● 为什么需要单元测试
● Golang如何编写测试用例
● 测试套件和断言
● TDD(测试驱动开发)实践
● Mocking和Stubbing
RESTful API设计
● 什么是RESTful API
● REST架构原则
● HTTP动词和URL设计
● Golang中的RESTful API设计
● Swagger和OpenAPI规范
Web性能优化技巧
● 什么是Web性能优化
● 前端性能优化技巧
● 服务器端性能优化技巧
● Golang中的Web性能优化技巧
● 性能测试和性能监控
Websocket、SSE
● 什么是WebSocket和SSE
● WebSocket和SSE的应用场景
● Golang中的WebSocket和SSE实现
● WebSocket和SSE的安全问题
● WebSocket和SSE的性能优化


实战项目


短链接服务


#### 第一部分:基础服务
- 短链接服务的功能需求与技术选型
- Golang 基础语法与常用库复习
- 使用 Gin 框架建立 HTTP 服务
- 使用 Redis 存储数据
#### 第二部分:实现短链接服务核心功能
- 实现短链接生成算法
- 实现短链接与长链接的映射关系存储与查询
- 实现短链接的访问与重定向
#### 第三部分:服务可用性与性能
- 实现短链接的定期过期与清理
- 实现短链接的访问计数与统计
- 使用 Nginx 反向代理与负载均衡提高服务性能


论坛


#### 第一部分:基础服务
- 论坛服务的技术选型与功能需求
- 使用 Gin 框架建立 HTTP 服务
- 使用 MySQL 存储数据,表结构设计
#### 第二部分:实现论坛基础功能
- 实现用户注册与登录
- 实现帖子发布与查看
- 实现评论功能
#### 第三部分:提高服务可用性与性能
- 实现帖子分页查询
- 实现用户权限控制
- 使用 Redis 缓存提高服务性能


反向代理网关


#### 第一部分:构建基础服务
- 反向代理网关服务的技术选型与功能需求
#### 第二部分:实现反向代理网关核心功能
- 实现反向代理的请求转发
- 实现请求过滤与安全控制
- 实现请求记录与日志输出
#### 第三部分:提高服务可用性与性能
- 实现请求负载均衡与高可用
- 实现请求缓存与加速
- 实现请求重试与自动故障转移


容器化开发


Docker的基本概念
● 什么是Docker
● Docker的优势
● Docker的基本架构
Docker的基本命令
● Docker镜像
● Docker容器
● Docker网络
● Docker数据卷
Dockerfile的基本编写方法
● Dockerfile的基本结构
● Dockerfile的指令
● Dockerfile的编写实例
网络模式
● Docker的网络模式
● Bridge模式
● Host模式
● Overlay模式
数据卷
● 数据卷的概念
● 数据卷的类型
● 数据卷的使用方法
Docker Compose
● Compose的概念
● Compose的基本命令
● Compose的使用方法
Docker Swarm
● Swarm的概念
● Swarm的基本命令
● Swarm的使用方法
Kubernetes 基本原理与使用方式
● Kubernetes 历史、介绍
- Kubernetes 的历史和背景
- Kubernetes 的目标和优势
- Kubernetes 架构和组件
● Kubernetes 常见概念、对象
- Pod、Service、Deployment、StatefulSet 等常见概念
- Kubernetes 对象的基本属性和关系
- Kubernetes 对象的生命周期管理
● 暴露 Kubernetes 服务
- Kubernetes 中的 Service 对象
- Service 的类型和作用
- Service 的创建和配置
- Service 的暴露和访问

微服务开发


微服务概念
● 什么是微服务?
● 微服务与单体应用的区别
● 微服务的优点和缺点
● 微服务的基本组件:服务发现、负载均衡、API 网关等
分布式系统的常见问题
● 分布式系统的定义和特点
● CAP 理论的基本概念
● 一致性协议:Paxos、Raft 等
● 分布式系统的故障类型和应对策略
微服务架构设计
● 微服务架构的基本原则
● 微服务间通信方式:同步、异步、消息队列等
● 微服务的部署方式:容器化、虚拟化、云原生等
● 微服务的监控和治理:服务注册发现、链路追踪、容错等
微服务框架
● gRPC介绍
● Protocol Buffers语法
● 使用gRPC进行微服务开发
● 搭建gRPC服务端和客户端
● 实现gRPC服务端和客户端的双向流
● Interceptor
● 什么是拦截器
● gRPC拦截器的分类
● 实现gRPC拦截器的方法
● gRPC拦截器的应用场景
● 流式RPC
● 什么是流式RPC
● 实现流式RPC的方法
● 流式RPC的应用场景
服务注册与发现、注册中心
● 什么是服务注册与发现
● Etcd的介绍
● 使用Etcd进行服务注册与发现
● Consul的介绍
● 使用Consul进行服务注册与发现
监控、日志、分布式追踪
● 什么是监控、日志、分布式追踪
● Prometheus的介绍
● 使用Prometheus进行监控
● Grafana的介绍
● 使用Grafana进行数据可视化
● ELK的介绍
● 使用ELK进行日志收集和分析
● Jaeger的介绍
● 使用Jaeger进行分布式追踪

如果你没有后端工作经验,或者平时的学习中没有机会接触到过后端设计和开发,想要补充相关知识点储备和业务了解,那么一定要跟着这个大纲来学习下~

如果你刚刚开始工作,但是觉得知识Golang知识不够体系化,基础不够扎实,包括但不限于在校生、应届毕业生,无论你是否自学过,Golang基础一定要再夯实一下!

特点及优势

  • 全面性:
    该课程涵盖了从Golang基础到进阶知识,再到Web开发、容器化和微服务开发等高级内容,让学生掌握Golang在各种应用场景下的最佳实践
  • 实践性:
    采用微项目实战的形式,让学生通过实际开发各种简单需求的应用来巩固知识和技能,培养解决问题的能力,提升自己的职业竞争
  • 前沿性:
    将会介绍最新的Web开发、容器化和微服务技术,如Docker、Kubernetes、gRPC和RESTful API等,为学生提供学习和实践的最新方向
  • 深度:
    课程注重深入理解Golang语言和相关技术,包括语法、并发模型、数据结构和算法等方面,可以提高学生的编程水平和实践经验
  • 贴近实际:
    课程里的案例和项目都来自于实际应用场景,让学生能够更好地理解Golang语言和技术的实际应用,并且在工作中运用。