Z
ZHANK
工程化

包与导入

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      // 可以被外部导入