Go 毕设入门 — 从语法到高并发服务

知识库
知识库文档
/tech-stacks/golang/tutorial/Go 毕设入门 — 从语法到高并发服务.md

文档

Go 语言毕设入门教程

前言

Go 语言在国内互联网大厂(字节跳动、腾讯、B站)广泛使用,毕选用 Go 写后端能体现扎实的工程能力。本教程带你快速掌握 Go 的核心概念。

第一章:Go 的哲学 — 少即是多

Go 的设计哲学是 简洁实用

  • 没有类继承 → 用组合 + interface
  • 没有泛型(Go 1.18 以前)→ 简洁但有局限
  • 没有异常 → 用 error 返回值
  • 只有 25 个关键字
// ❌ Java 风格
try {
    result = doSomething();
} catch (Exception e) {
    log.error(e);
}

// ✅ Go 风格 — 显式处理每个错误
result, err := doSomething()
if err != nil {
    log.Printf("doSomething failed: %v", err)
    return err
}

第二章:指针与内存

Go 有指针但没有指针运算,安全且高效:

// 值传递 — 拷贝整个结构体
func updateBad(u User) {
    u.Name = "new"  // 不影响外部
}

// 指针传递 — 零拷贝
func updateGood(u *User) {
    u.Name = "new"  // 修改原值
}

// 常见模式:构造函数返回指针
func NewUser(name string) *User {
    return &User{Name: name, CreatedAt: time.Now()}
}

毕设实践:DTO 传值,模型传指针,大切片传指针。

第三章:并发才是杀手锏

// 经典模式:Worker Pool
func workerPool(jobs <-chan Job, results chan<- Result, numWorkers int) {
    var wg sync.WaitGroup
    for i := 0; i < numWorkers; i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()
            for job := range jobs {
                results <- process(job)
            }
        }()
    }
    wg.Wait()
    close(results)
}

毕设场景

  • 批量数据处理(论文数据分析)
  • 并发爬虫(数据采集模块)
  • 实时推送(WebSocket 服务)

第四章:结构体标签与验证

type Student struct {
    ID     int    `json:"id" gorm:"primaryKey"`
    Name   string `json:"name" binding:"required" gorm:"size:50"`
    Email  string `json:"email" binding:"required,email" gorm:"uniqueIndex"`
    Major  string `json:"major"`
}

结构体标签是 Go 的元编程方式,一个结构体可以通过标签同时描述 JSON 序列化、字段验证、数据库映射。

第五章:项目结构

go-project/
├── cmd/
│   └── server/
│       └── main.go        # 入口
├── internal/
│   ├── handler/           # HTTP 处理器(Controller)
│   ├── service/           # 业务逻辑
│   ├── repository/        # 数据访问
│   └── model/             # 数据模型
├── config/
├── go.mod
└── go.sum

internal/ 下的包无法被外部项目引用,这是 Go 的访问控制机制。

思考题

  1. goroutine 和 OS 线程的本质区别是什么?
  2. channel 关闭后还能读取吗?往已关闭的 channel 写数据会怎样?
  3. Go 的 GC 如何做到 STW(Stop The World)低于 1ms?

信息

路径
/tech-stacks/golang/tutorial/Go 毕设入门 — 从语法到高并发服务.md
更新时间
2026/5/30