Go 被誉为“自带电池”(Batteries Included)的语言,因为其标准库极其丰富,涵盖了开发中 80% 的需求。本章精选了几个最常用、最基础的标准库,展示它们的常规用法。
示例代码
package main
import (
"encoding/json"
"fmt"
"strings"
"time"
)
type User struct {
ID int `json:"id"`
Name string `json:"name"`
// json:"-" 表示在 JSON 中忽略该字段
Email string `json:"-"`
}
func main() {
// 1. fmt - 格式化
age := 18
// Sprintf 返回字符串,Printf 直接打印
msg := fmt.Sprintf("I am %d years old", age)
fmt.Println(msg)
// 2. strings - 字符串处理
str := " hello world "
fmt.Println(strings.TrimSpace(str)) // 去除首尾空格
fmt.Println(strings.Contains(str, "world")) // true
fmt.Println(strings.Join([]string{"a", "b"}, "-")) // a-b
// 3. time - 时间处理
now := time.Now()
// Go 的独特日期格式化模板:2006-01-02 15:04:05
fmt.Println(now.Format("2006-01-02 15:04:05"))
// 时间计算
later := now.Add(time.Hour)
fmt.Println(later.Sub(now)) // 1h0m0s
// 4. encoding/json - JSON 编解码
user := User{ID: 1, Name: "Hank", Email: "admin@hankmo.com"}
// 序列化 Struct -> JSON
jsonData, _ := json.Marshal(user)
fmt.Println(string(jsonData)) // {"id":1,"name":"Hank"}
// 反序列化 JSON -> Struct
var u2 User
json.Unmarshal(jsonData, &u2)
fmt.Println(u2.Name)
}关键点解释
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"}到该结构体中。