Skip to content

附录A:Go常用标准库速查表

附录A是Go常用标准库的快速参考:fmt、os、io、time、encoding等。用途:当你需要某个功能时快速查找对应函数签名和用法。

使用方法:按需查阅,不必从头读到尾


函数说明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.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()

// 字符串转数字
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.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")后缀

// 当前时间
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")
// Duration
time.Sleep(2 * time.Second)
time.Sleep(time.Millisecond * 500)
// 常用常量
time.Second
time.Minute
time.Hour
time.Day

import "encoding/json"
// 编码
data := map[string]string{"key": "value"}
bytes, _ := json.Marshal(data)
str := string(bytes)
// 美化输出
bytes, _ = json.MarshalIndent(data, "", " ")
// 解码
var result map[string]string
json.Unmarshal([]byte(str), &result)
// 流式解码
decoder := json.NewDecoder(reader)
for decoder.More() {
var obj Object
decoder.Decode(&obj)
}

// 创建错误
err := errors.New("错误信息")
// 包装
err = fmt.Errorf("上下文: %w", err)
// 检查
errors.Is(err, target)
errors.As(err, &target)
errors.Unwrap(err)

// 创建
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:
}

var mu sync.Mutex
mu.Lock()
defer mu.Unlock()
var wg sync.WaitGroup
wg.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.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)

// 删除元素
delete(m, "key")
// 长度
len(slice)
len(m)
// cap
cap(slice)
// 拷贝
copy(dst, src)
// make
make([]int, 10)
make(map[string]int)
make(chan int, 10)

  1. 优先使用标准库:Go标准库质量高、功能完善,第三方库能不用就不用
  2. README是首选文档:每个包都有go doc package/path或pkg.go.dev
  3. 错误处理不能省略:os.ReadFile返回error,io.ReadAll返回error,不要用_忽略