Golang
本板块介绍 Go 语言,目的是结合 Typescript 搭建后端服务器
学习路径如下:
1. 学习目标概览
| 语言 | 应用方向 | 核心用途 |
|---|---|---|
| Go | 后端服务 | REST API、RPC 服务、并发处理、高性能后端 |
| TypeScript | 前端开发 | 构建交互式 UI,增强 JS 类型安全,配合框架如 React/Vue |
你目标是“搭建前后端服务”,建议以如下结构设计系统:
[前端 - TypeScript]
↓ HTTP / WebSocket
[后端 - Go]
↳ 数据库 (MySQL / PostgreSQL / MongoDB)
2. Go 语言后端开发路线图
阶段 1:语言基础与核心语法
必学语法要点:
| 模块 | 内容 |
|---|---|
| 基础语法 | 包声明 package main入口函数 func main() |
| 变量声明 | var x int = 10, x := 10 |
| 数据类型 | 基本类型:int, float64, string, bool复合类型:array, slice, map, struct |
| 控制结构 | if, switch, for, range, break, continue |
| 函数定义 | 参数、返回值、可变参数多返回值 (int, error) |
| 指针 | *int, &x, 函数传址 |
| 结构体 Struct | 自定义数据结构,方法绑定 |
| 接口 Interface | 动态多态,类型断言 |
| 错误处理 | errors.New(), fmt.Errorf(), panic/recover |
推荐练习:
- 实现斐波那契、排序算法
- 自定义结构体并绑定方法
- 创建一个接口并实现多个结构体
阶段 2:Go 标准库 & 并发模型
I/O 与文件操作
ioutil.ReadFile, os.Open, os.Create
bufio.Scanner, fmt.Fprintf
网络编程(标准库)
net/http:处理 HTTP 请求
http.ListenAndServe, http.HandleFunc, http.Request, http.ResponseWriter
并发
| 特性 | 使用方式 |
|---|---|
| 协程 | go func() {} 非阻塞执行 |
| 通道 | ch := make(chan int),<-ch, ch <- val |
| select语句 | 监听多个 channel |
| sync 包 | WaitGroup, Mutex, Once 等并发控制 |
| context 包 | 用于取消 goroutine、传递请求范围参数 |
定时器
time.Sleep,time.After,time.NewTicker
阶段 3:Web 框架 Gin 实战
安装
go get -u github.com/gin-gonic/gin
基础结构
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{"message": "pong"})
})
r.Run()
常用模块:
| 功能 | Gin 模块 |
|---|---|
| 请求方法 | GET, POST, PUT, DELETE, PATCH |
| 路由参数 | c.Param("id"), c.Query("name") |
| JSON 绑定 | c.BindJSON(&struct{}) |
| 表单绑定 | c.Bind(&formStruct) |
| 中间件 | r.Use(Logger()), 自定义中间件 |
| 跨域 | github.com/gin-contrib/cors |
| JWT 鉴权 | github.com/appleboy/gin-jwt/v2 |
推荐结构:
/main.go
/routes/
api.go
/controllers/
user.go
/models/
user.go
/middleware/
auth.go
阶段 4:数据库操作
使用 GORM(对象关系映射框架)
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
基础用法
dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
db.AutoMigrate(&User{}) // 自动建表
db.Create(&User{Name: "Tom"})
db.First(&user, 1) // 查询主键为1
查询/更新/删除
db.Where("name = ?", "Tom").Find(&users)
db.Model(&user).Update("Age", 18)
db.Delete(&user)
GORM 进阶
- 事务处理:
db.Transaction(...) - 联表查询、预加载:
db.Preload("Orders").Find(&users) - 自定义钩子:
BeforeCreate,AfterUpdate
阶段 5:用户认证与安全
密码加密(bcrypt)
import "golang.org/x/crypto/bcrypt"
hash, _ := bcrypt.GenerateFromPassword([]byte("password"), bcrypt.DefaultCost)
bcrypt.CompareHashAndPassword(hash, []byte("password"))
JWT 登录认证
- 安装库:github.com/golang-jwt/jwt/v5
- 实现:
- 用户登录时生成 token
- 请求时附带 token 验证
- 结合 Gin 中间件做统一拦截