感谢您发送咨询!我们的团队成员将很快与您联系。
感谢您发送预订!我们的团队成员将很快与您联系。
课程时长 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 rungo buildgo installgo 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)
培训师证明了自己是该领域的专家,这一点我从不认为理所当然。他提供了非常有用的行业标准见解。
Giuseppe
课程 - Learning Go Programming
机器翻译
我很喜欢我们进行的实践练习数量。我个人通过动手学习,所以Francesco提供了大量实践练习,这非常好。我在理解幻灯片中的一些概念时遇到了困难,但当我真正动手实践并能够实现语言的一些关键特性时,这帮助我更好地理解了它。
Adam Fitzhugh - OpticoreIT
课程 - Learning Go Programming
机器翻译
节奏适中,培训师能够帮助并应对稍难的问题。
Andrei Mihai - Viasat
课程 - Learning Go Programming
机器翻译
Radu的深入知识,以及为我量身定制的进度。
Adeel Ahmad - Coefficient Data Ltd
课程 - Learning Go Programming
机器翻译
培训师的灵活性。课程确实满足了我们的特定需求。
Daniel Kurner - Daimler TSS
课程 - Learning Go Programming
机器翻译