Go中创建自定义包需遵循规范:以module为单位组织,用go mod init初始化,包名小写且与目录一致,导出标识符首字母大写,导入时用模块路径+子目录名。
在 Go 中创建自定义包是实现代码模块化和复用的核心方式。关键在于遵循 Go 的包管理规范:每个包对应一个目录,以 package 声明开头,导出标识符首字母大写,且需通过 go mod init 初始化模块。
Go 推荐以模块(module)为单位组织代码。先新建项目目录,例如 myutils,然后在该目录下执行:
go mod init myutils —— 生成 go.mod 文件,声明模块路径在项目中新建子目录,例如 mathutil,并在其中创建 mathutil.go:
package mathutil
// Add 返回两数之和(首字母大写表示导出)
func Add(a, b int) int {
return a + b
}
// Max 是未导出函数,仅在本包内可用
func max(a, b int) int {
if a > b {
return a
}
return b
}
mathutil)通常小写、简洁,与目录名一致.go 文件顶部必须有 package xxx 声明,同目录下所有文件须属同一包在模块根目录下创建 main.go,导入本地包时使用模块路径 + 子目录名:
package main
import (
"fmt"
"myutils/mathutil" // 模块名 + 包目录名
)
func main() {
result := mathutil.Add(3, 5)
fmt.Println(result) // 输出:8
}
go.mod 中的模块名决定github.com/you/m
yutils,则导入应为 github.com/you/myutils/mathutil
go run main.go 会自动解析依赖并编译,无需额外配置可通过文件后缀或构建标签控制包行为。例如,为不同操作系统提供专用实现:
os_linux.go(含 //go:build linux)和 os_windows.go(含 //go:build windows)不复杂但容易忽略:确保 GO111MODULE=on(现代 Go 默认开启),避免误入 GOPATH 模式导致导入失败。