Appearance
第 16 章:常用标准库
16.1 输入输出:fmt 包
fmt 包是 Go 语言中用于格式化输入输出的标准库。
常用函数
输出函数
fmt.Println():打印并换行fmt.Print():打印不换行fmt.Printf():格式化打印fmt.Sprintf():格式化字符串
示例
go
package main
import "fmt"
func main() {
name := "Alice"
age := 25
fmt.Println("Hello, World!")
fmt.Print("Hello, ")
fmt.Println("World!")
fmt.Printf("Name: %s, Age: %d\n", name, age)
message := fmt.Sprintf("%s is %d years old", name, age)
fmt.Println(message)
}格式化动词
| 动词 | 描述 | 示例 |
|---|---|---|
%v | 通用格式 | fmt.Printf("%v", 42) |
%d | 十进制整数 | fmt.Printf("%d", 42) |
%f | 浮点数 | fmt.Printf("%f", 3.14) |
%s | 字符串 | fmt.Printf("%s", "hello") |
%t | 布尔值 | fmt.Printf("%t", true) |
%p | 指针 | fmt.Printf("%p", &x) |
16.2 字符串处理:strings 包
strings 包提供了字符串操作的函数。
常用函数
strings.Contains():检查字符串是否包含子串strings.Index():查找子串位置strings.Split():分割字符串strings.Join():连接字符串strings.Trim():去除首尾空白strings.ToUpper():转为大写strings.ToLower():转为小写
示例
go
package main
import (
"fmt"
"strings"
)
func main() {
s := "Hello, World!"
fmt.Println(strings.Contains(s, "World")) // true
fmt.Println(strings.Index(s, "World")) // 7
parts := strings.Split(s, ", ")
fmt.Println(parts) // [Hello World!]
joined := strings.Join(parts, " - ")
fmt.Println(joined) // Hello - World!
trimmed := strings.Trim(" Hello ", " ")
fmt.Println(trimmed) // Hello
fmt.Println(strings.ToUpper(s)) // HELLO, WORLD!
fmt.Println(strings.ToLower(s)) // hello, world!
}16.3 时间处理:time 包
time 包提供了时间处理的函数。
常用函数
time.Now():获取当前时间time.Date():创建指定时间time.Duration:表示时间间隔time.Sleep():休眠指定时间time.Parse():解析时间字符串
示例
go
package main
import (
"fmt"
"time"
)
func main() {
// 获取当前时间
now := time.Now()
fmt.Println(now)
// 格式化时间
fmt.Println(now.Format("2006-01-02 15:04:05"))
// 创建指定时间
t := time.Date(2023, 12, 25, 10, 30, 0, 0, time.UTC)
fmt.Println(t)
// 时间间隔
d := 2 * time.Second
fmt.Println(d)
// 休眠
time.Sleep(1 * time.Second)
fmt.Println("After sleep")
// 解析时间
t2, err := time.Parse("2006-01-02", "2023-12-25")
if err != nil {
fmt.Println(err)
} else {
fmt.Println(t2)
}
}16.4 随机数:math/rand
math/rand 包提供了生成随机数的函数。
常用函数
rand.Seed():设置随机种子rand.Int():生成随机整数rand.Intn():生成指定范围内的随机整数rand.Float64():生成随机浮点数
示例
go
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
// 设置随机种子
rand.Seed(time.Now().UnixNano())
// 生成随机整数
fmt.Println(rand.Int())
// 生成 0-99 之间的随机整数
fmt.Println(rand.Intn(100))
// 生成 0.0-1.0 之间的随机浮点数
fmt.Println(rand.Float64())
// 生成 1.0-10.0 之间的随机浮点数
fmt.Println(1.0 + rand.Float64()*9.0)
}16.5 文件操作:os、io 包
os 包
os 包提供了操作系统相关的功能,包括文件操作。
常用函数
os.Open():打开文件os.Create():创建文件os.Remove():删除文件os.Rename():重命名文件os.Getwd():获取当前工作目录os.Chdir():改变工作目录
示例
go
package main
import (
"fmt"
"os"
)
func main() {
// 获取当前工作目录
wd, err := os.Getwd()
if err != nil {
fmt.Println(err)
} else {
fmt.Println("Current directory:", wd)
}
// 创建文件
file, err := os.Create("test.txt")
if err != nil {
fmt.Println(err)
} else {
defer file.Close()
fmt.Println("File created")
}
// 重命名文件
err = os.Rename("test.txt", "rename.txt")
if err != nil {
fmt.Println(err)
} else {
fmt.Println("File renamed")
}
// 删除文件
err = os.Remove("rename.txt")
if err != nil {
fmt.Println(err)
} else {
fmt.Println("File deleted")
}
}io 包
io 包提供了基本的 I/O 接口。
常用接口
io.Reader:读取接口io.Writer:写入接口io.Copy():复制数据
示例
go
package main
import (
"fmt"
"io"
"os"
"strings"
)
func main() {
// 从字符串读取
reader := strings.NewReader("Hello, World!")
// 写入到标准输出
io.Copy(os.Stdout, reader)
fmt.Println()
// 从文件读取
file, err := os.Open("example.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
// 写入到标准输出
io.Copy(os.Stdout, file)
}