Go 入门
goroutine、标准库、云原生常见度。
35 分钟
Go 入门
Go(Golang)由 Google 设计,主打 简单语法、静态编译、内置并发。在云原生栈里 Kubernetes、Docker、Prometheus、etcd 大量用 Go 编写——若你已在 java-fundamentals 打好 OOP 与 Maven 基础,Go 的 包管理 go mod + 单二进制部署 会显得很「运维友好」。
学习目标
- 读懂最小 Go HTTP 服务与
go mod项目结构 - 理解 goroutine、channel 与 Java 线程模型的差异
- 说清 Go 在后端/云原生中的常见落点
最小 HTTP 服务
package main
import (
"encoding/json"
"net/http"
)
func tracksHandler(w http.ResponseWriter, r *http.Request) {
_ = json.NewEncoder(w).Encode(map[string]string{"slug": "java-fundamentals"})
}
func main() {
http.HandleFunc("/tracks", tracksHandler)
http.ListenAndServe(":8080", nil)
}
编译:go build -o server . → 单个可执行文件,无需 JVM。对比 Spring Boot:启动快、内存占用常更低,标准库 HTTP 够用,复杂领域仍可能回到 Java。
goroutine 与 channel
| 概念 | Go | Java(对照 java-fundamentals) |
|---|---|---|
| 轻量并发 | go fn() goroutine | Thread、ExecutorService |
| 通信 | channel ch <- v | BlockingQueue、CompletableFuture |
| 风格口号 | 不要通过共享内存通信 | synchronized、锁、JUC |
ch := make(chan int)
go func() { ch <- 42 }()
n := <-ch
M:N 调度由 runtime 负责;泄漏 goroutine(channel 无人读)是常见生产 bug,需 pprof 排查。
标准库与生态
- net/http:REST、反向代理入门
- context:超时、取消,贯穿 gRPC 与 HTTP 客户端
- encoding/json:无 Jackson 也能跑,结构体 tag 映射字段
- 测试:
go test内置,表格驱动测试是社区习惯
框架:Gin、Echo、Fiber 类似 Express(见 node-express),比 Spring 薄。
何时选 Go
- 基础设施:网关、Sidecar、Operator、CLI
- 高并发 I/O:代理、推送、日志采集