Skip to content

4.1 常用标准库 ​

fmt - 格式化 I/O ​

go
// Print 系列
fmt.Print("Hello")
fmt.Println("World")
fmt.Printf("Name: %s, Age: %d", "Go", 13)

// 常用动词
// %v  默认格式
// %+v 带字段名
// %#v Go 语法格式
// %T  类型
// %d  十进制
// %f  浮点数
// %s  字符串
// %t  布尔
// %p  指针

// Scan 系列
fmt.Scan(&v)
fmt.Scanf("%d", &v)
fmt.Scanf("10 20", "%d %d", &x, &y)

strings - 字符串处理 ​

go
// 查找
strings.Contains(s, "Go")
strings.HasPrefix(s, "Hello")
strings.HasSuffix(s, "World")
strings.Index(s, "Go")

// 大小写
strings.ToLower(s)
strings.ToUpper(s)

// 修剪
strings.TrimSpace("  hello  ")
strings.TrimPrefix("Hello,", "Hello")
strings.TrimSuffix("Hello.go", ".go")

// 分割
strings.Split("a,b,c", ",")
strings.Fields("a  b\tc")

// 连接
strings.Join([]string{"a", "b"}, ",")

// 替换
strings.Replace("hello world", "world", "Go", 1)
strings.ReplaceAll("hello hello", "hello", "hi")

// 重复
strings.Repeat("ab", 3)

strconv - 类型转换 ​

go
// 字符串转整数
i, _ := strconv.Atoi("123")
i64, _ := strconv.ParseInt("123", 10, 64)

// 整数转字符串
strconv.Itoa(123)
strconv.FormatInt(123, 10)

// 浮点数
f, _ := strconv.ParseFloat("3.14", 64)
strconv.FormatFloat(3.14, 'f', 2, 64)

// 布尔
b, _ := strconv.ParseBool("true")
strconv.FormatBool(true)

time - 时间处理 ​

go
// 当前时间
now := time.Now()

// 创建时间
t := time.Date(2024, 1, 15, 10, 30, 0, 0, time.Local)

// 组件
t.Year(), t.Month(), t.Day()
t.Hour(), t.Minute(), t.Second()

// 格式化
t.Format("2006-01-02 15:04:05")
t.Format(time.RFC3339)

// 解析
time.Parse("2006-01-02", "2024-01-15")

// 运算
t.Add(time.Hour)
t.AddDate(0, 1, 0)  // 加 1 个月

// 比较
t1.Before(t2)
t1.After(t2)
t1.Equal(t2)

// 时间差
t2.Sub(t1).Hours()

encoding/json ​

go
type Person struct {
    Name  string `json:"name"`
    Age   int    `json:"age"`
    Email string `json:"email,omitempty"`
}

// 编码
data, _ := json.Marshal(p)
pretty, _ := json.MarshalIndent(p, "", "  ")

// 解码
var p Person
json.Unmarshal([]byte(jsonStr), &p)

// 解码为 map
var m map[string]interface{}
json.Unmarshal([]byte(jsonStr), &m)