Go标准库按包组织,需导入后使用;常用功能集中在fmt、strings、strconv、time、os等包;自定义库须用go mod init初始化模块,包路径须含模块名且导出函数首字母大写。
Go 标准库不叫“函数库”,没有全局函数集合;所有功能都组织在包(package)里,必须导入后才能用 —— 直接调用 fmt.Println 这类不是“调用函数库”,而是调用 fmt 包导出的函数。
怎么找和用标准库里的常用功能?
Go 没有“常用函数清单”这种中心化文档,但高频需求集中在几个包:
-
fmt:格式化 I/O,fmt.Printf、fmt.Sscanf是解析字符串的主力 -
strings:字符串操作,strings.Split、strings.TrimSpace、strings.Contains用得最多 -
strconv:基础类型转换,strconv.Atoi、strconv.ParseFloat、strconv.FormatInt必须熟记错误返回模式(第二个返回值是error) -
time:时间处理,time.Now、time.Parse、time.Duration类型转换容易出错(比如10 * time.Second不能写成10 * 1e9) -
os和io/ioutil(Go 1.16+ 推荐用os.ReadFile/os.WriteFile):文件读写,注意路径分隔符统一用/,Go 自动适配 Windows
为什么 import “mylib” 报错 “cannot find module”?
Go Modules 要求自定义库也得是模块(module),不是放个 .go 文件就能 import。常见卡点:
- 项目根目录下没运行
go mod init myproject,导致 Go 不知道当前模块名 - 自定义包路径写错了:比如包在
./utils,却写import "utils"—— 正确写法是import "myproject/utils"(模块名 + 子路径) - 自定义包里没导出函数:函数名首字母小写(如
helper())无法被外部引用,必须大写(Helper()) - 包内没声明
package utils(与目录名一致),或声明了但文件名不是.go后缀
创建可复用的自定义库(非 main 包)的实际步骤
目标:写一个 uuid 工具包,提供生成随机 UUID 的函数,供其他项目 import。