Go 被誉为“自带电池”(Batteries Included)的语言,因为其标准库极其丰富,涵盖了开发中 80% 的需求。本章精选了几个最常用、最基础的标准库,展示它们的常规用法。
示例代码
1package main
2
3import (
4 "encoding/json"
5 "fmt"
6 "strings"
7 "time"
8)
9
10type User struct {
11 ID int `json:"id"`
12 Name string `json:"name"`
13 // json:"-" 表示在 JSON 中忽略该字段
14 Email string `json:"-"`
15}
16
17func main() {
18 // 1. fmt - 格式化
19 age := 18
20 // Sprintf 返回字符串,Printf 直接打印
21 msg := fmt.Sprintf("I am %d years old", age)
22 fmt.Println(msg)
23
24 // 2. strings - 字符串处理
25 str := " hello world "
26 fmt.Println(strings.TrimSpace(str)) // 去除首尾空格
27 fmt.Println(strings.Contains(str, "world")) // true
28 fmt.Println(strings.Join([]string{"a", "b"}, "-")) // a-b
29
30 // 3. time - 时间处理
31 now := time.Now()
32 // Go 的独特日期格式化模板:2006-01-02 15:04:05
33 fmt.Println(now.Format("2006-01-02 15:04:05"))
34
35 // 时间计算
36 later := now.Add(time.Hour)
37 fmt.Println(later.Sub(now)) // 1h0m0s
38
39 // 4. encoding/json - JSON 编解码
40 user := User{ID: 1, Name: "Hank", Email: "admin@hankmo.com"}
41
42 // 序列化 Struct -> JSON
43 jsonData, _ := json.Marshal(user)
44 fmt.Println(string(jsonData)) // {"id":1,"name":"Hank"}
45
46 // 反序列化 JSON -> Struct
47 var u2 User
48 json.Unmarshal(jsonData, &u2)
49 fmt.Println(u2.Name)
50}
关键点解释
fmt 包
Print/Println:标准输出。Printf:格式化输出,常用占位符%s(字符串),%d(整数),%v(自动推导),%+v(显示结构体字段名)。
time 包
- 格式化陷阱:必须记住基准时间
2006-01-02 15:04:05(助记:1月2号3点4分5秒06年)。 time.Duration:表示时间段,单位是纳秒。常用10 * time.Second。
strings 包
- 提供了高效的不可变字符串操作:
Split,Replace,Count,HasPrefix等。 - 频繁拼接字符串推荐使用
strings.Builder。
encoding/json 包
- 利用 Struct Tags(如
`json:"name"`)来控制序列化行为。 - 只会序列化结构体中的 导出字段(首字母大写)。
小结
熟练使用标准库可以避免重复造轮子。除了上面介绍的,还有 net/http(Web服务)、io/ioutil(文件读写)、os(系统操作)等也非常重要。
练习题
- 获取当前时间戳(Unix Timestamp),并将其转换为 “YYYY-MM-DD” 格式的字符串。
- 定义一个包含
Title和URL的结构体,解析 JSON 字符串{"title":"Google","url":"www.google.com"}到该结构体中。