Develop

Go 语言入门:从语法到第一个 Web 服务的完整学习路径

✎ -- 字 🕐 -- 分钟
字号
Go 语言入门学习路径

为什么选择 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 的基础语法和并发模式,你就能胜任大多数后端开发场景。