Skip to main content

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 中间件做统一拦截

阶段 6:配置管理与日志系统

配置(Viper)

go get github.com/spf13/viper
viper.SetConfigName("config")
viper.AddConfigPath(".")
viper.ReadInConfig()
viper.GetString("db.username")

日志系统(Zap)

go get go.uber.org/zap

阶段 7:部署与项目发布

构建二进制

go build -o myserver main.go

配合系统服务运行

  • systemd 注册服务
  • 日志持久化
  • Nginx 配置转发

容器化部署(Docker)

FROM golang:1.21-alpine
WORKDIR /app
COPY . .
RUN go build -o main .
CMD ["./main"]

3. 项目实战建议

简单项目

  • Todo List:增删查改,保存到 SQLite/MySQL
  • Blog API:文章接口 + JWT 登录
  • 文件服务器:上传、预览、下载
  • 爬虫中转服务:定时拉取网页,API 暴露结果
项目名称后端功能 (Go)前端功能 (TS)
博客系统文章增删改查,用户登录认证,JWT 权限控制富文本编辑器、文章分页、登录界面
任务管理系统创建任务、设置状态、用户协作拖拽式 UI,看板视图
聊天室WebSocket 实时消息推送实时聊天界面,用户列表更新
文件共享平台多文件上传下载、限速、链接分享文件展示、进度条、用户验证