包与模块初识
用 go.mod 组织代码:包、模块路径与导出约定。
package 与目录
- 包(package):一组同目录、同
package名的源文件,是编译与可见性的基本单位 - 模块(module):版本化的依赖单元,由根目录
go.mod定义
通常:一个目录一个包名(目录名常与包名相近,但不强制相等)。main 包除外,用于生成可执行文件。
example.com/demo/
go.mod
main.go # package main
greeter/
greeter.go # package greeter
go mod init 与模块路径
go mod init example.com/demo
生成:
module example.com/demo
go 1.22
模块路径是导入前缀。本模块内引用:
// main.go
package main
import (
"fmt"
"example.com/demo/greeter"
)
func main() {
fmt.Println(greeter.Hello("go"))
}
// greeter/greeter.go
package greeter
func Hello(name string) string {
return "hello, " + name
}
模块路径在公开发布时常对应仓库 URL(如 github.com/you/demo);本地练习可用任意独特路径。
导出与文档注释
只有大写开头的类型、函数、字段、常量可被其他包使用:
package greeter
// Hello 返回问候语。
func Hello(name string) string {
return "hello, " + name
}
func helper() {} // 包外不可见
导出符号上方的注释会进入 go doc / IDE 文档;习惯以符号名开头写一句。
internal/ 目录有特殊规则:仅当前模块中 internal 的父树可导入,适合放不想被外部模块依赖的代码。
常用模块命令(入门)
go build ./...
go test ./...
go list ./...
加第三方依赖、整理 go.mod 见进阶「工程与依赖管理」。
小结
go mod init建立模块;导入路径 = 模块路径 + 子目录- 同目录同
package;跨包只能用导出标识符 internal/限制外部依赖- 先跑通本模块多包引用,再引入第三方