Go 概述与特性
Go 是 2009 年 Google 推出的系统级编程语言,定位“简单、高效、并发”。面试主线:语言特性、为什么云原生选它、和你的 Python 栈怎么互补。
核心定位
| 特性 | 说明 |
|---|---|
| 静态编译 | 编译成单一二进制,无依赖,部署即拷贝 |
| 强类型 | 编译期检查,类型安全 |
| 并发内建 | goroutine + channel(CSP 模型)是语言级能力 |
| 垃圾回收 | 自动内存管理(三色标记,见 GC 篇) |
| 简单语法 | 无继承、无泛型(1.18 前)、无异常,学习曲线平缓 |
设计哲学一句话:少即是多。Go 刻意砍掉特性(继承、异常、重载),换可读性和编译速度。
为什么云原生流行
- Docker、Kubernetes、etcd、Prometheus 全是 Go 写的:云原生栈的事实语言
- 单一静态二进制:容器镜像小(几 MB 到几十 MB),部署简单(不用装运行时)
- 高并发:goroutine 十万级无压力,适合网关、微服务
- 编译快、跨平台交叉编译(GOOS/GOARCH)
面试话术:云原生选 Go 是因为静态编译 + 原生并发 + 部署简单,三者正好是基础设施的刚需。
与 Python/Java 对比
| 维度 | Go | Python | Java |
|---|---|---|---|
| 编译 | 静态编译 | 解释执行 | JIT 编译 |
| 并发 | goroutine(CSP) | 协程/线程 | 线程池 |
| 开发速度 | 快 | 最快 | 中 |
| 性能 | 高 | 低 | 高 |
| 生态 | 云原生/网络 | 数据/AI | 企业级 |
| 学习曲线 | 平缓 | 平缓 | 陡 |
选型结论:性能敏感的后端和基础设施用 Go,快速迭代和数据/AI 用 Python。两者互补,一个项目里 Go 做服务层、Python 做数据处理是常见组合。
本分类地图
- 基础语法 / 切片与 Map / 接口与反射 / 函数与错误处理:语言核心
- Goroutine 与 GMP / Channel / 并发同步:并发三件套(必考)
- 内存与垃圾回收 / 标准库与工程实践:原理与实战
- Go vs Python:呼应本面试栈的横向对比
面试追问
- Go 为什么适合云原生? 静态编译单二进制 + 原生高并发 + 部署简单。K8s/Docker 生态都是 Go
- Go 和 Python 怎么选? 性能敏感服务/基础设施用 Go,快速迭代/数据 AI 用 Python。可组合
- Go 的并发模型? goroutine(轻量用户态线程)+ channel 通信。CSP:不要共享内存来通信,用通信共享内存
- Go 没有的特性? 继承(用组合)、异常(用 error 返回值)、泛型(1.18 才加)。有意的简化
- 静态编译的好处? 单二进制无依赖、启动快、镜像小、跨平台交叉编译