Skip to content

Go 后端学习笔记 ​

面向 Java / Python 后端工程师的 Go 语言与 Web 后端开发系列,从语法到并发、框架再到工程落地。


一、系列定位 ​

1.1 这套笔记写给谁 ​

已有 Java 或 Python 后端基础、希望掌握 Go 并投入 Web 服务开发的工程师。笔记默认你会一门后端语言,因此大量使用与 Java / Python 的对照讲解,而不重复解释"什么是循环、什么是数据库"这类通用概念。

1.2 内容覆盖总览 ​

模块文件一句话简介难度
Go 基础Go-基础.md环境与 go mod、语法要素、函数、切片 Map、字符串、结构体⭐
Go 进阶特性Go-进阶特性.md指针、接口、错误处理、反射、泛型、测试与标准库⭐⭐
Go 并发编程Go-并发编程.mdgoroutine、channel、sync、GMP 调度、并发模式⭐⭐⭐
Go Gin 框架Go-Gin框架.md路由、参数校验、中间件、JWT、优雅关停、pprof⭐⭐
Go Web 项目实践Go-Web项目实践.md分层工程、GORM、Redis 缓存、zap、Docker、生产坑⭐⭐⭐

1.3 推荐学习路径 ​

阶段学习内容产出
第一阶段:语法入门Go-基础用 Go 重写一个之前用 Java/Python 写过的小工具
第二阶段:语言进阶Go-进阶特性给工具补上错误处理与单元测试
第三阶段:并发Go-并发编程手写 worker pool,跑通 go test -race
第四阶段:Web 框架Go-Gin框架完成带 JWT 鉴权的 REST API
第五阶段:工程实践Go-Web项目实践按分层范式搭一个可 Docker 部署的完整服务

建议顺序阅读:Go-基础 → Go-进阶特性 → Go-并发编程 → Go-Gin框架 → Go-Web项目实践。前两篇可并行,但并发与框架章节依赖前文概念。


二、Java / Python 转 Go:语法速览 ​

2.1 变量与常量 ​

场景GoJavaPython
声明变量var x int = 1 / x := 1int x = 1;x = 1
多返回值func f() (int, error)需封装对象或 Optional元组解包
常量const Max = 100static final惯例全大写
枚举iota + 类型别名enumIntEnum
类型转换显式 int64(x)显式强转隐式随意

2.2 流程控制 ​

场景GoJavaPython
循环只有 forfor / while / do-whilefor / while
switch 穿透默认不穿透,fallthrough 显式穿透默认穿透,break 显式跳出match-case(3.10+)
条件带初始化if err := f(); err != nil无(可变量提升)无
遍历for i, v := range xs增强 forenumerate

2.3 对象模型 ​

场景GoJavaPython
类型定义type User struct{...}class Userclass User
方法结构体外 func (u *User) M()类内方法类内方法
继承无,结构体内嵌组合extends多继承
可见性首字母大小写public / private / protected下划线约定
构造工厂函数 NewUser()构造器__init__
接口隐式实现(鸭子类型)implements 显式ABC / Protocol
泛型Go 1.18+ 基础泛型成熟泛型体系typing(弱)

2.4 错误与异常 ​

场景GoJavaPython
表达方式返回值 error异常抛出异常抛出
处理if err != niltry/catchtry/except
包装fmt.Errorf("...: %w", err)cause 链raise ... from
判断类型errors.Is / errors.Asinstanceof / 多 catchexcept XxxError
致命错误panic + recover未捕获异常未捕获异常

2.5 并发 ​

场景GoJavaPython
轻量任务go func(){...}()线程 / 虚拟线程(Loom) / 线程池协程 asyncio / 线程
消息传递channelBlockingQueueQueue
等待完成sync.WaitGroupCountDownLatch / Future.getasyncio.gather
锁sync.Mutex / RWMutexsynchronized / ReentrantLockthreading.Lock
取消传播context中断 / Future.canceltask.cancel
原子操作atomicAtomicInteger / volatile无(GIL)

2.6 工程生态对照 ​

场景GoJavaPython
依赖管理go modMaven / Gradlepip / poetry
主流 Web 框架Gin / Echo / FiberSpring BootDjango / FastAPI
ORMGORM / sqlxMyBatis / JPASQLAlchemy
测试testing + go testJUnitpytest
构建产物单二进制jar / war源码包
部署Docker 直接跑JDK + jar解释器 + 依赖

2.7 思想转变要点 ​

Java / Python 习惯Go 的正确姿势
用异常控制业务错误错误是返回值,每个边界显式处理
面向对象建模(继承体系)结构体组合 + 小接口,为行为而非抽象编码
线程池 + Future 编排任务goroutine + channel / WaitGroup,任务即协程
重度 ORM 模板与反射框架接受"薄框架",手写胶水代码换透明可控
虚拟机调优(GC、堆)关注 goroutine 数与内存分配(pprof)

三、版本与运行说明 ​

3.1 推荐版本 ​

笔记示例基于 Go 1.22+(涉及 range 遍历整数、循环变量新语义、slices/maps 泛型包等 1.21/1.22 新特性),建议新项目直接使用当前最新稳定版。

3.2 验证环境 ​

bash
go version          # 确认已安装
go env GOPROXY      # 国内建议 https://goproxy.cn,direct
go version          # 确认已安装
go env GOPROXY      # 国内建议 https://goproxy.cn,direct

3.3 代码约定 ​

  • 正文代码均为"可运行风格"片段:标注 package main 的可在空模块直接 go run;标注 func 的为节选,需按上下文补全 import 与调用。
  • 涉及第三方库(gin、gorm、go-redis、zap 等)的版本以 go get 时的最新稳定版为准。

返回后端技术笔记目录或继续阅读第一个模块:Go 基础。