附录A:Go常用标准库速查表
附录A是Go常用标准库的快速参考:fmt、os、io、time、encoding等。用途:当你需要某个功能时快速查找对应函数签名和用法。
使用方法:按需查阅,不必从头读到尾
fmt - 格式化I/O
Section titled “fmt - 格式化I/O”| 函数 | 说明 | Python对应 |
|---|---|---|
fmt.Println(a...) | 打印+换行 | print() |
fmt.Printf(format, a...) | 格式化打印 | print(f"...") |
fmt.Sprintf(format, a...) | 返回格式化字符串 | f"..." |
fmt.Errorf(format, a...) | 创建错误 | Exception() |
%d // 整数(十进制)%x // 整数(十六进制)%f // 浮点数%.2f // 浮点数(2位小数)%s // 字符串%v // 任意值%#v // 详细格式%T // 类型%p // 指针地址os - 操作系统
Section titled “os - 操作系统”| 函数 | 说明 |
|---|---|
os.Getenv("PATH") | 获取环境变量 |
os.Setenv("KEY", "value") | 设置环境变量 |
os.Exit(0) | 退出程序 |
os.Mkdir("dir", 0755) | 创建目录 |
os.Remove("file") | 删除文件 |
os.Rename("old", "new") | 重命名 |
os.Stat("file") | 文件信息 |
// 读取data, _ := os.ReadFile("file.txt")
// 写入os.WriteFile("file.txt", []byte("content"), 0644)
// 打开file, _ := os.Open("file.txt")defer file.Close()strconv - 类型转换
Section titled “strconv - 类型转换”// 字符串转数字i, _ := strconv.Atoi("123")i, _ := strconv.ParseInt("123", 10, 64)f, _ := strconv.ParseFloat("3.14", 64)
// 数字转字符串s := strconv.Itoa(123)s := strconv.FormatInt(123, 10)s := strconv.FormatFloat(3.14, 'f', 2, 64)
// 字符串转布尔b, _ := strconv.ParseBool("true")
// 布尔转字符串s := strconv.FormatBool(true)strings - 字符串操作
Section titled “strings - 字符串操作”| 函数 | 说明 |
|---|---|
strings.Split(s, ",") | 分割 |
strings.Join(slice, ",") | 拼接 |
strings.Contains(s, "sub") | 是否包含 |
strings.Index(s, "sub") | 首次出现位置 |
strings.ToLower(s) | 转小写 |
strings.ToUpper(s) | 转大写 |
strings.Trim(s, " ") | 去除首尾空白 |
strings.Replace(s, "a", "b", -1) | 替换 |
strings.Fields(s) | 按空白分割 |
strings.HasPrefix(s, "pre") | 前缀 |
strings.HasSuffix(s, "suf") | 后缀 |
time - 时间处理
Section titled “time - 时间处理”// 当前时间now := time.Now()
// 时间戳unix := time.Now().Unix()
// 格式化str := now.Format("2006-01-02 15:04:05")
// 解析t, _ := time.Parse("2006-01-02", "2024-01-01")
// Durationtime.Sleep(2 * time.Second)time.Sleep(time.Millisecond * 500)
// 常用常量time.Secondtime.Minutetime.Hourtime.Dayjson - JSON处理
Section titled “json - JSON处理”import "encoding/json"
// 编码data := map[string]string{"key": "value"}bytes, _ := json.Marshal(data)str := string(bytes)
// 美化输出bytes, _ = json.MarshalIndent(data, "", " ")
// 解码var result map[string]stringjson.Unmarshal([]byte(str), &result)
// 流式解码decoder := json.NewDecoder(reader)for decoder.More() { var obj Object decoder.Decode(&obj)}errors - 错误处理
Section titled “errors - 错误处理”// 创建错误err := errors.New("错误信息")
// 包装err = fmt.Errorf("上下文: %w", err)
// 检查errors.Is(err, target)errors.As(err, &target)errors.Unwrap(err)context - 上下文
Section titled “context - 上下文”// 创建ctx := context.Background()ctx, cancel := context.WithCancel(parent)ctx, cancel := context.WithTimeout(parent, 5*time.Second)ctx, cancel := context.WithDeadline(parent, deadline)
// 取值ctx.Value(key)
// 检查取消select {case <-ctx.Done(): return ctx.Err()default:}sync - 并发同步
Section titled “sync - 并发同步”var mu sync.Mutexmu.Lock()defer mu.Unlock()
var wg sync.WaitGroupwg.Add(1)go func() { defer wg.Done()}()wg.Wait()
once := sync.Once{}once.Do(func() {})
var cond sync.Cond{L: &mu}cond.Wait()cond.Signal()cond.Broadcast()sort - 排序
Section titled “sort - 排序”// 切片排序sort.Ints([]int{3, 1, 2}) // 原地排序sort.Strings([]string{"c", "a", "b"})
// 自定义排序sort.Slice(data, func(i, j int) bool { return data[i] < data[j]})
// 检查是否已排序sort.IntsAreSorted([]int{1, 2, 3}) // true
// 二分查找i := sort.SearchInts(sortedSlice, target)map/slice 转换
Section titled “map/slice 转换”// 删除元素delete(m, "key")
// 长度len(slice)len(m)
// capcap(slice)
// 拷贝copy(dst, src)
// makemake([]int, 10)make(map[string]int)make(chan int, 10)- 优先使用标准库:Go标准库质量高、功能完善,第三方库能不用就不用
- README是首选文档:每个包都有
go doc package/path或pkg.go.dev - 错误处理不能省略:
os.ReadFile返回error,io.ReadAll返回error,不要用_忽略