📋 知识地图
说明:✅ = 已有覆盖(可继续深化) ⬜ = 待扩充
一、Go 语言概述
- ✅ Go 的设计哲学(简单、并发、高效编译)
- ✅ 与 C / Java 的对比定位
- ⬜ Go 版本演进与 Go Modules 的由来
- ⬜ Go 适用领域(云原生 / CLI 工具 / 微服务 / DevOps)
二、开发环境
- ⬜ Go 安装与环境变量(GOROOT / GOPATH / GOBIN)
- ⬜ Go Modules 包管理(go mod init / tidy / vendor)
- ⬜ 常用 IDE / 编辑器配置(VS Code + gopls)
- ⬜ gofmt / goimports 代码格式化
三、程序结构与语法基础
- ✅ Hello World 与包声明(package main)
- ✅ 数据类型(bool / string / int 系列 / float / byte / rune)
- ✅ 变量声明(var / 短声明 := / 批量声明)
- ✅ 常量与 iota 枚举
- ⬜ 零值(zero value)概念
- ⬜ 类型转换(Go 无隐式转换)
四、容器与集合
- ✅ 数组(固定长度)
- ✅ 切片(slice):make / append / copy / 切片截取
- ✅ Map:声明 / 增删改查 / 遍历
- ⬜ 切片底层原理(len vs cap / 扩容机制)
- ⬜ range 遍历的各种用法
- ⬜ 字符串与 rune 的关系(Unicode 处理)
五、流程控制
- ✅ if / else if / else
- ✅ switch(Go 特色的无条件 switch)
- ✅ for 循环(Go 唯一循环语句)
- ✅ break / continue / goto
- ⬜ fallthrough 在 switch 中的使用
- ⬜ defer 延迟执行(资源清理)
六、函数
- ✅ 函数声明(func、参数、返回值)
- ✅ 多返回值
- ✅ 函数作为值(func 类型变量)
- ⬜ 可变参数(…)
- ⬜ 匿名函数与闭包
- ⬜ defer 的执行顺序(LIFO 栈)
- ⬜ panic / recover 异常处理机制
七、结构体与方法
- ✅ 结构体定义与实例化
- ✅ 方法与接收者(receiver)
- ⬜ 值接收者 vs 指针接收者的选择
- ⬜ 结构体嵌入(组合优于继承)
- ⬩ 结构体标签(tags)与 JSON 序列化
- ⬜ new vs make 的区别
八、接口(interface)—— Go 的核心抽象
- ✅ 接口定义与实现(隐式实现)
- ⬜ 空接口 interface{} 与 any(Go 1.18+)
- ⬜ 类型断言(type assertion)
- ⬜ 类型选择(type switch)
- ⬜ 常用标准接口:Stringer / Reader / Writer / Error
- ⬜ 接口组合
九、并发编程(Go 最大杀器)
- ⬜ goroutine 概念与启动(go 关键字)
- ⬜ channel(无缓冲 / 有缓冲 / 关闭 / 遍历)
- ⬜ select 多路复用
- ⬜ sync 包:WaitGroup / Mutex / RWMutex / Once
- ⬜ 并发模式:生产者-消费者 / 扇出扇入 / Pipeline
- ⬜ context 上下文(超时、取消、传值)
- ⬜ 并发陷阱:数据竞态(race condition)、死锁
- ⬜ go run -race 竞态检测
十、错误处理
- ⬜ Go 的 error 接口设计哲学
- ⬜ errors.New / fmt.Errorf
- ⬜ 错误包装与解包(%w / errors.Unwrap)
- ⬜ 自定义错误类型
- ⬜ 错误处理最佳实践(不吞错误)
十一、包管理与工程结构
- ⬜ Go Modules 深入(go.mod / go.sum / 版本锁定)
- ⬜ 包导入规则(公开/私有:大小写首字母)
- ⬜ 标准项目布局(cmd / internal / pkg / api)
- ⬜ 依赖管理与版本升级
十二、标准库精选
- ⬜ fmt:格式化 I/O
- ⬜ net/http:HTTP 客户端与服务器
- ⬜ encoding/json:JSON 序列化
- ⬜ os / io / bufio:文件与 I/O 操作
- ⬜ time:时间处理
- ⬜ testing:单元测试与基准测试
- ⬜ flag:CLI 参数解析
十三、测试
- ⬜ 单元测试(TestXxx / t.Run / table-driven tests)
- ⬜ 表格驱动测试模式
- ⬜ 基准测试(BenchmarkXxx)
- ⬜ TestMain 与测试初始化
- ⬜ testify 第三方断言库
十四、实战项目参考
- ⬜ 简易 HTTP REST API
- ⬜ CLI 工具开发(cobra 框架)
- ⬜ 数据库操作(database/sql + 驱动)
go语言基础知识
go语言基础知识
基础于c,具有部署简单、并发号、执行性能好的特点。与java相比,没有类和继承,相比java更加高效,相比c更加简单易编译。go对多核心优化好,可让程序员调用硬件更多性能。在很多语法现象上有从c语言简化,同时为了降低歧义和程序员语言风格对代码功能的影响,对代码书写方式和工程文件结构等做了规定。
hello world
1 | package main // 声明 main 包,main包是唯一的,是入口。 |
go语言以包为管理单位,每个go源文件需要声明其所属包,一目录下同级文件属于同一个包。
数据类型和变量生成
数据类型
- bool 布尔
- string 字符串
- int、int8、int16、int32、int64 整型(分别8进制、16进制、32进制等)
- uint、uint8、uint16、uint32、uint64、uintptr
- byte // uint8 的别名
- float32、float64 实型
变量赋值方式
var name type 变量声明方式
1 | var ( //批量变量 |
全局变量在主函数之外进行声明。
GO语言容器
数组遍历
1 | var team [3]string |
切片
1 | fmt.Println(team[1:2]) //输出数组第二和第三个的内容。相当于生成切片。 |
map概念(python中的字典)
map是一种特殊的数据结构,是由key(索引)和value(值)两个元素组合成的无序集合。map的容量是动态的。
1 | package main |
go语言程序结构
判断
1 | if condition1 { |
循环
只支持for循环
1 | sum := 0 |
break退出本次循环。 goto可以直接跳出多层循环到标签处。
1 | goto breakHere |
函数
一般函数声明
1 | func typedTwoValues() (int, int) { |
1 | package main |
结构体
go语言没有类的概念,结构体与c语言类似。(不过我感觉c和go的结构体和java的类挺相似,因为都可以属性继承等。)
1 | type Point struct { //结构体定义 |
接口概念
虽然go没有类和继承的概念,但其通过接口的概念实现面对对象的特性(一种抽象的存在)。
1 | type writer interface{ //定义接口名,interface是定义接口关键词。接口类型由数个方法构成,默认在接口名后面加er以便于区分 |