Go 包、导入与可见性

Go 如何用 package 组织代码、用 import 建立依赖,以及通过标识符首字母大小写控制导出可见性。

#type / concept #status / growing #tech / dev #resource / go

[!info] related notes

Go 包、导入与可见性

一句话定义

Go 通过包来组织代码和建立边界,通过导入来声明依赖,通过标识符首字母大小写来表达对外可见性。

核心机制 / 工作原理

Go 的几个基本规则:

  • 一个目录通常对应一个包
  • 源文件开头写 package xxx
  • 通过 import 使用其他包
  • 首字母大写的标识符可导出,首字母小写的只在包内可见

这种设计很朴素,但非常重要,因为它把“抽象边界”压缩成一套容易读懂的规则,而不是复杂访问修饰符系统。

最小例子 / 最小场景

package user

type Profile struct {
    Name string
}

func NewProfile(name string) Profile {
    return Profile{Name: name}
}

func normalizeName(name string) string {
    return strings.TrimSpace(name)
}

在这个例子里:

  • ProfileNewProfile 对包外可见
  • normalizeName 只在包内可见

为什么这部分重要

Go 项目可读性很大程度取决于包边界是否清晰。一个包应该表达一组紧密相关的能力,而不是随手堆函数。

边界与易混淆点

  • 可导出不等于必须导出,很多实现细节应该保留包内
  • 包名一般短小直接,不应该像 Java 那样层层拉长
  • 包和模块不是一个层级的概念:包偏代码组织,模块偏依赖发布
创建于 2026/6/20 更新于 2026/6/20