联系我们
 课程时长 28 小时

课程大纲

1. Go简介

  • 什么是Go(Golang)?
  • Go的历史和设计哲学
  • Go作为Web和系统编程语言的角色
  • 关键特性:
    • 静态类型
    • 简洁性和可读性
    • 快速编译
    • 内置并发
    • 垃圾回收
    • 跨平台编译
  • Go的常见用例
  • Go的优势和局限性
  • Go与C/C++、JavaScript、Ruby、Python和Java的对比
  • 理解Go生态系统
  • Go标准库概览
  • Go模块和依赖管理
  • Go应用程序的解剖
  • 实操:检查和运行一个简单的Go程序

2. 设置Go开发环境

  • 安装Go
  • 理解Go工具链
  • 配置环境变量
  • 选择IDE或代码编辑器
  • 使用命令行操作Go
  • 创建Go工作区
  • 理解Go项目结构
  • 使用Go Modules初始化项目
  • 使用go mod init
  • 使用go get管理依赖
  • 更新和检查依赖
  • 使用gofmt格式化源代码
  • 使用go run运行程序
  • 使用go build构建应用
  • 安装Go应用
  • 交叉编译应用
  • 实操:在容器内创建和配置Go项目

3. Go变量、常量和类型

  • 声明变量
  • 显式类型与推断类型
  • 短变量声明
  • 常量
  • 零值
  • 变量的作用域和生命周期
  • 原始数据类型:
    • 整数
    • 浮点数
    • 复数
    • 布尔值
    • 字符串
  • 类型转换
  • 处理Unicode和UTF-8
  • Rune和字节
  • 多变量赋值
  • 理解类型安全
  • 练习:构建一个小型命令行数据处理程序

4. 运算符和表达式

  • 算术运算符
  • 比较运算符
  • 逻辑运算符
  • 赋值运算符
  • 自增和自减
  • 运算符优先级
  • 处理整数和浮点计算
  • 避免常见的类型转换错误
  • 练习:实现计算和验证逻辑

5. 日期、时间和格式化

  • 使用time包
  • 创建和操作日期
  • 获取当前时间
  • 时区和位置
  • 解析日期和时间
  • 格式化日期和时间
  • 计算持续时间
  • 处理Unix时间戳
  • 处理超时
  • 练习:在应用中添加时间戳和持续时间计算

6. 数组、切片、映射和结构体

数组

  • 声明数组
  • 初始化数组
  • 遍历数组
  • 多维数组

切片

  • 理解切片与数组的区别
  • 创建切片
  • 追加元素
  • 复制切片
  • 切片长度和容量
  • 切片操作
  • 常见的切片陷阱

映射

  • 创建映射
  • 添加和删除条目
  • 检查键是否存在
  • 遍历映射
  • 包含复杂数据的映射

结构体

  • 定义结构

  • 结构体字段

  • 初始化结构体

  • 嵌套结构体

  • 匿名结构体

  • 结构体方法

  • JSON结构体标签

  • 实操:使用结构体、切片和映射建模用户、产品和应用数据

7. 条件逻辑和循环

  • if语句
  • else和else if
  • 条件内变量声明
  • for循环
  • 无限循环
  • 循环条件
  • break和continue
  • 使用range遍历
  • 嵌套循环
  • switch语句
  • 基于表达式的switch
  • 多个case
  • 默认case
  • 类型switch
  • 练习:实现应用验证和处理逻辑

8. 函数

  • 定义函数
  • 函数参数
  • 返回值
  • 多返回值
  • 命名返回值
  • 可变参数函数
  • 匿名函数
  • 函数值
  • 闭包
  • 递归
  • 将函数作为参数传递
  • 返回错误的函数
  • 设计小型可复用函数
  • 练习:将现有代码重构为可复用函数

9. 指针和内存概念

  • 什么是指针?
  • 取地址和解引用运算符
  • 指针和函数参数
  • 指针接收器
  • 指向结构体的指针
  • Nil指针
  • 何时使用指针
  • 值语义与引用语义
  • 理解Go的内存管理和垃圾回收
  • 常见的指针错误
  • 实操:使用指针修改应用数据

10. 在Go中创建Web应用程序

  • Go的Web能力概览
  • 介绍net/http包
  • 创建HTTP服务器
  • HTTP请求和响应
  • HTTP方法
  • 请求URL和查询参数
  • HTTP头
  • HTTP状态码
  • 路由基础
  • 创建处理程序
  • 处理表单数据
  • 提供静态文件
  • 处理HTML模板
  • 模板变量和控制结构
  • 构建Web应用程序结构
  • 实操:构建一个基础的Go Web服务器

11. 构建RESTful Web服务

  • REST架构基础
  • 设计API端点
  • GET、POST、PUT、PATCH和DELETE
  • 处理JSON
  • 编码和解码JSON
  • 请求验证
  • HTTP状态码
  • 错误响应
  • 查询参数和路径参数
  • API响应结构
  • 分离处理程序和业务逻辑
  • 实操:构建CRUD REST API

12. Go运行时、编译和项目构建

  • 理解Go编译器
  • Go的构建过程
  • go run
  • go build
  • go install
  • go test
  • 构建标志
  • 特定环境的配置
  • 为不同操作系统和架构构建
  • 生成独立二进制文件
  • 管理应用配置
  • 练习:为多个平台编译应用

13. 处理文件和Web

  • 打开和关闭文件
  • 读取文件
  • 写入文件
  • 创建目录
  • 文件元数据
  • 缓冲I/O
  • 处理流
  • 读取和写入JSON文件
  • HTTP客户端
  • 发起出站HTTP请求
  • 处理HTTP客户端错误
  • 超时和取消
  • 处理API响应
  • 实操:从外部API获取数据并持久化到本地

14. 错误处理和调试

  • Go的错误处理理念
  • 从函数返回错误
  • 检查错误
  • 创建自定义错误
  • 包装错误
  • 为错误添加上下文
  • errors.Is和errors.As
  • Panic和Recovery
  • 何时使用panic
  • 调试常见的Go问题
  • 记录应用活动
  • 使用Go调试工具
  • 练习:诊断并修复故意引入的应用错误

15. 接口和抽象

  • 什么是接口?
  • 隐式接口实现
  • 定义接口
  • 接口值
  • 空接口 / any
  • 类型断言
  • 类型switch
  • 指针实现与值实现
  • 设计小型接口
  • 依赖倒置
  • 使用接口进行测试
  • 降低应用耦合度
  • 实操:在示例Web应用中引入接口

16. 包和项目组织

  • 创建包
  • 包命名规范
  • 导出和非导出标识符
  • 导入包
  • 包初始化
  • 组织应用层次结构
  • 内部包
  • 使用Go Modules管理依赖
  • 语义化版本
  • 使用第三方包
  • 避免循环依赖
  • 设计可维护的Go项目
  • 练习:将应用重构为独立的包

17. 使用Goroutine实现并发

  • 什么是并发?
  • Goroutines
  • 启动goroutines
  • 理解轻量级并发执行
  • 同步挑战
  • 共享状态
  • 竞态条件
  • 使用sync.WaitGroup
  • 互斥锁和读写锁
  • 原子操作
  • 实操:将顺序任务转换为并发处理

18. 通道

  • 理解通道
  • 发送和接收值
  • 缓冲通道与非缓冲通道
  • 阻塞行为
  • 关闭通道
  • 遍历通道
  • 方向性通道
  • 基于通道的通信
  • Select语句
  • 超时和取消
  • 工作池模式
  • 生产者/消费者模式
  • 实操:构建并发工作系统

19. 上下文和请求管理

  • 为什么上下文在Web应用中很重要
  • context.Context
  • 请求范围的上下文
  • 取消
  • 截止时间
  • 超时
  • 在应用层间传播上下文
  • 取消数据库或HTTP操作
  • 避免滥用上下文
  • 练习:在Web应用中添加请求取消和超时

20. 测试Go应用程序

  • 为什么自动化测试很重要
  • 编写单元测试
  • testing包
  • 测试函数
  • 测试命名规范
  • 基于表的测试
  • 测试错误
  • 测试HTTP处理程序
  • HTTP测试服务器
  • 测试夹具
  • 测试覆盖率
  • 基准测试
  • 示例测试
  • 使用模拟或伪对象测试接口
  • 实操:为示例应用创建测试套件

21. 性能优化

  • 理解Go应用性能
  • 识别瓶颈
  • CPU与内存性能
  • 高效的数据结构
  • 减少不必要的分配
  • 字符串、字节和缓冲区
  • Goroutine管理
  • 避免过度并发
  • 缓存策略
  • 数据库和网络考量
  • 应用剖析
  • 基准测试和性能测试
  • 使用Go的剖析工具
  • 练习:剖析并优化一个故意设计低效的应用

22. 安全和稳健的Web应用程序实践

  • 验证用户输入
  • 安全处理HTTP请求
  • 防止常见Web漏洞
  • 安全的错误处理
  • 身份验证和授权概念
  • 管理密钥和配置
  • 安全的HTTP通信
  • 避免在日志中暴露敏感信息
  • 依赖管理和更新
  • 资源限制和请求超时
  • 练习:审查并加固示例API

23. 应用日志和可观察性

  • 日志基础
  • 结构化日志
  • 日志级别
  • 请求日志
  • 错误日志
  • 关联和请求ID
  • 监控应用行为
  • 基本指标
  • 健康检查端点
  • 诊断生产环境问题
  • 实操:添加结构化日志和健康检查

24. Go应用程序容器化

  • 为什么使用容器?
  • Go应用和容器化
  • 编写Dockerfile
  • 多阶段构建
  • 构建最小运行时镜像
  • 通过环境变量管理配置
  • 容器网络
  • 暴露应用端口
  • 在容器中运行应用
  • 测试容器化应用
  • 实操:将示例Go应用打包为生产就绪的容器

25. 部署

  • 为生产环境准备应用
  • 构建生产二进制文件
  • 环境配置
  • 基于容器的部署
  • 部署架构
  • 反向代理
  • HTTPS/TLS考量
  • 应用健康检查
  • 优雅关闭
  • 处理操作系统信号
  • 扩展Go Web应用程序
  • 水平扩展与垂直扩展
  • 基本部署故障排除
  • 实操:部署示例Web应用程序

26. 综合项目:完整的Go Web应用程序

参与者通过开发一个完整的应用来综合所学知识。

该项目可以包括:

  • 使用Go Modules初始化项目
  • 包组织
  • HTTP路由
  • REST API端点
  • JSON请求和响应处理
  • 输入验证
  • 错误处理
  • 接口
  • 并发处理
  • 外部API通信
  • 文件或数据库持久化
  • 自动化测试
  • 日志
  • 性能考量
  • 容器化
  • 生产配置
  • 部署

27. 回顾和最佳实践

  • 回顾核心Go语法
  • Go编码规范
  • 编写惯用的Go代码
  • 保持代码简洁
  • 有效的包设计
  • 错误处理最佳实践
  • 接口设计原则
  • 并发最佳实践
  • 测试策略
  • 性能考量
  • 可维护性和可读性
  • 新Go开发者常见的错误
  • 继续Go开发的建议方法

28. 结论

  • 回顾关键概念
  • 回顾完成的Web应用程序
  • 提问和讨论
  • 故障排除常见的真实世界场景
  • Go开发的后续步骤建议
  • 额外的Go库和生态系统资源
  • 构建生产级Go服务的更多机会

要求

  • 了解通用编程原理

受众

  • 开发人员

客户评论 (5)

即将举行的公开课程

课程分类