《Go 语言与 AI 提效》大纲
Go 入门
- 为什么使用 Go 语言
- Go 环境安装与配置
- Go IDE 安装与配置
- Go 第 1 个 Hello World 程序
- Go 程序的基本结构
- Go 有哪些关键字
- Go 有哪些数据类型
- Go 包管理机制
- Go go.mod 文件详解
- Go go.sum 文件详解
Go 进阶
- Go 实现多态
- Go 实现继承
- Go 泛型编程
- Go 常用标准库
- Go 并发编程
- Go 内存管理
- Go 调度模型
Go 源码
- Go defer 关键字的底层实现原理
- Go slice 的底层实现原理
- Go map 的底层实现原理
- Go channel 的底层实现原理
- Go mutex 的底层实现原理
- Go rwmutex 的底层实现原理
- Go goroutine 的底层实现原理
- Go waitGroup 的底层实现原理
- Go cond 的底层实现原理
Go 面试
Go 基础面试问题合集
- Go 方法与函数的区别
- Go 方法值接收者和指针接收者的区别
- Go 函数返回局部变量的指针是否安全
- Go 函数参数传递到底是值传递还是引用传递
- Go 内置函数 make 和 new 的区别
Go 切片面试问题合集
- Go array 和 slice 的区别
- Go slice 深拷贝和浅拷贝
- Go slice 扩容机制
- Go slice 为什么不是线程安全的
Go 哈希表面试问题合集
- Go map 遍历为什么是无序的
- Go map 为什么是非线程安全的
- Go map 如何查找
- Go map 冲突的解决方式
- Go map 的负载因子为什么是 6.5
- Go map 如何扩容
- Go map 和 sync.Map 谁的性能好,为什么
Go 管道面试问题合集
- Go channel 有什么特点
- Go channel 有无缓冲的区别
- Go channel 为什么是线程安全的
- Go channel 如何控制 goroutine 并发执行顺序
- Go channel 共享内存有什么优劣势
- Go channel 发送和接收什么情况下会死锁
Go 协程面试问题合集
- Go goroutine 和线程的区别
- Go goroutine 泄露的场景
- Go 如何查看正在执行的 goroutine 数量
- Go 如何控制并发的 goroutine 数量
Go 锁面试问题合集
- Go 原子操作有哪些
- Go 原子操作和锁的区别
- Go 互斥锁正常模式和饥饿模式的区别
- Go 互斥锁允许自旋的条件
- Go 可重入锁如何实现
Go 调度模型面试问题合集
- Go 线程实现模型
- Go GMP 和 GM 模型
- Go work stealing 机制
- Go hand off 机制
- Go 抢占式调度
- Go 如何查看运行时调度信息
Go 内存管理面试问题合集
- Go 内存逃逸机制
- Go 内存对齐机制
- Go GC 实现原理
- Go GC 如何调优
Go 并发面试问题合集
- Go 常用的并发模型
- Go 有哪些并发同步原语
- Go 有哪些方式安全读写共享变量
- Go 如何查看 GC 信息
- Go 如何排查数据竞争问题
Go Web 开发
- Go 第 1 个 Web 程序
- Go RESTful API 设计和实现
- Go 路由和中间件
- Go 数据库连接 ORM
Go 微服务
- 开源微服务框架 go-micro
- 开源微服务框架 go-zero
- 开源微服务框架 go-kratos
- 自研微服务框架 go-fusion