为什么选择 Go?
Go(Golang)是 Google 开发的开源编程语言,以其简洁的语法、高效的并发模型和快速的编译速度著称。Kubernetes、Docker、Prometheus 等知名项目均采用 Go 编写,足以证明其在云原生时代的核心地位。
1. 基础语法速览
Go 的语法设计追求极简,去掉了类继承、泛型(1.18 前)、try-catch 等概念,让代码更易阅读和维护。
package main
import "fmt"
func main() {
// 变量声明
var name string = "Go"
age := 13 // 短变量声明
// 切片(动态数组)
langs := []string{"Go", "Rust", "Python"}
// map
scores := map[string]int{"Alice": 95, "Bob": 87}
fmt.Printf("%s %d %v %v\n", name, age, langs, scores)
}
2. 并发模型:Goroutine 与 Channel
Go 最强大的特性就是轻量级并发。goroutine 只占用几 KB 内存,可以轻松创建上万个。
func fetchURL(url string, ch chan<- string) {
start := time.Now()
resp, err := http.Get(url)
if err != nil {
ch <- fmt.Sprintf("%s: error", url)
return
}
defer resp.Body.Close()
ch <- fmt.Sprintf("%s: %dms", url, time.Since(start).Milliseconds())
}
func main() {
urls := []string{"https://golang.org", "https://github.com"}
ch := make(chan string, len(urls))
for _, url := range urls {
go fetchURL(url, ch) // 并发执行
}
for range urls {
fmt.Println(<-ch)
}
}
3. 搭建第一个 Web 服务
Go 标准库 net/http 提供了完整的 HTTP 客户端/服务端能力,无需第三方框架即可搭建生产级 API。
package main
import (
"encoding/json"
"log"
"net/http"
)
type Message struct {
Text string `json:"text"`
}
func helloHandler(w http.ResponseWriter, r *http.Request) {
msg := Message{Text: "Hello, Go Web!"}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(msg)
}
func main() {
http.HandleFunc("/api/hello", helloHandler)
log.Println("Server running on :8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
4. 错误处理哲学
Go 不使用异常,而是把错误作为返回值显式处理。这种设计让错误处理路径清晰可见。
func readConfig(path string) (*Config, error) {
data, err := os.ReadFile(path)
if err != nil {
return nil, fmt.Errorf("failed to read config: %w", err)
}
var cfg Config
if err := json.Unmarshal(data, &cfg); err != nil {
return nil, fmt.Errorf("invalid config format: %w", err)
}
return &cfg, nil
}
5. Go 项目工程化
- 模块管理:使用
go mod init初始化项目,go mod tidy整理依赖 - 代码格式化:
go fmt统一代码风格,无需争论格式 - 测试:
go test -cover运行测试并查看覆盖率 - 静态分析:
go vet检查潜在问题 - 编译部署:
GOOS=linux GOARCH=amd64 go build交叉编译为单一可执行文件
总结
Go 的简洁性、高性能和强大的并发模型使其成为云原生后端开发的首选语言。掌握 Go 的基础语法和并发模式,你就能胜任大多数后端开发场景。