本教程面向零基础或刚接触 Go 的开发者,按由浅入深的顺序讲解所有主要知识点。建议按章节顺序阅读。
一、Go 简介
Go 是什么?
Go(又称 Golang)是一种由 Google 主导开发的编程语言,特点包括:
- 语法简洁,学习成本相对低
- 并发模型原生支持(goroutine + channel)
- 编译为本地二进制,部署方便
适合做什么?
- 高性能网络服务(HTTP/RPC)
- 需要并发处理的场景
- 云原生、工具类程序
二、安装与工作区
安装 Go
- 建议安装最新稳定版
- 确认版本:
go version
创建模块(Go Modules)
mkdir my-go-app
cd my-go-app
go mod init example.com/my-go-app
Go 的依赖管理通常基于 go.mod。
三、基础语法
最小可运行程序
创建 main.go:
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
}
变量与常量
var name = "Alice"
var age int = 18
const appName = "my-app"
常用类型
int/int64stringboolfloat64
四、函数、包与模块
函数
func add(a int, b int) int {
return a + b
}
包
Go 用目录划分包,例如:
my-go-app/
├── main.go
└── utils/
└── math.go
utils/math.go:
package utils
func Add(a int, b int) int {
return a + b
}
在 main.go 中使用:
import "example.com/my-go-app/utils"
五、结构体与接口
结构体(struct)
type User struct {
Name string
Age int
}
方法
func (u User) Greet() string {
return fmt.Sprintf("hi, %s", u.Name)
}
接口(interface)
接口关注“行为”,而不是具体类型:
type Greeter interface {
Greet() string
}
func SayHello(g Greeter) {
fmt.Println(g.Greet())
}
六、并发:goroutine 与 channel
goroutine
go func() {
fmt.Println("running in goroutine")
}()
channel 通信
ch := make(chan int)
go func() {
ch <- 42
}()
v := <-ch
fmt.Println(v)
七、错误处理
Go 的错误处理通常是显式返回 error:
import "errors"
func findUser(id int) (string, error) {
if id <= 0 {
return "", errors.New("invalid id")
}
return "Alice", nil
}
调用方:
name, err := findUser(1)
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Println(name)
八、HTTP 服务示例
创建 server/main.go:
package main
import (
"encoding/json"
"net/http"
)
func main() {
http.HandleFunc("/health", func(w http.ResponseWriter, _ *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
_ = json.NewEncoder(w).Encode(map[string]any{"ok": true})
})
http.ListenAndServe(":3000", nil)
}
运行:
go run ./server
访问:http://localhost:3000/health
九、测试与工具
基础测试
在 utils/math_test.go:
package utils
import "testing"
func TestAdd(t *testing.T) {
got := Add(1, 2)
if got != 3 {
t.Fatalf("expected 3, got %d", got)
}
}
运行测试:
go test ./...
十、部署与小结
构建
go build -o app .
交叉编译(示例)
GOOS=linux GOARCH=amd64 go build -o app .
小结
- 基础语法:变量、函数、结构体
- 工程结构:包与 modules(
go.mod) - 设计能力:接口驱动抽象
- 并发:goroutine/channel
- 网络:net/http 做最小服务
- 质量:
go test ./...
十一、学习路径小结
- 跑通
go mod init并完成一个main.go - 学会结构体与方法、接口与多态
- 写至少一个 goroutine + channel 的例子
- 做一个
/health的 HTTP 服务 - 补上测试:至少 1-2 个
go test用例
遇到问题可查阅 Go 官方文档。