包与导入
package 声明、import 路径、导出规则(大写=公开)、init 函数
包与导入
Go 项目按包(package)组织——一个目录一个包,大写 = 公开,小写 = 私有。
学完本章你将: 掌握 package 声明、import 路径、导出规则、init 函数。
包结构
myapp/
├── go.mod # module myapp
├── main.go # package main(入口)
├── models/
│ └── user.go # package models
└── utils/
└── helper.go # package utils
go
// main.go
package main
import (
"myapp/models" // 导入自己的包
"myapp/utils"
)
func main() {
u := models.User{Name: "小明"}
utils.Help()
}
导出规则
go
package models
// 大写 = 公开(exported)
type User struct {
Name string // 公开
age int // 私有——外部包不能访问
}
func NewUser(name string) *User { } // 公开
func validate(name string) error { } // 私有
init 函数
go
// 包加载时自动执行(在所有包变量初始化之后,main 之前)
func init() {
fmt.Println("包初始化")
}
// 多个 init 按声明顺序执行
// 不同包的 init 按依赖顺序执行
internal 包
go
// internal/ 目录下的包只能被父目录及子目录导入
myapp/
├── internal/
│ └── secret/
│ └── secret.go // 只能被 myapp/ 下的包导入
└── pkg/
└── public.go // 可以被外部导入