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(系统操作)等也非常重要。

练习题

  1. 获取当前时间戳(Unix Timestamp),并将其转换为 "YYYY-MM-DD" 格式的字符串。

  2. 定义一个包含 TitleURL 的结构体,解析 JSON 字符串 {"title":"Google","url":"www.google.com"} 到该结构体中。


相关阅读