Skip to main content

包与模块初识

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 见进阶「工程与依赖管理」。

小结

  1. go mod init 建立模块;导入路径 = 模块路径 + 子目录
  2. 同目录同 package;跨包只能用导出标识符
  3. internal/ 限制外部依赖
  4. 先跑通本模块多包引用,再引入第三方

上一篇:函数与方法 · 下一篇(进阶):接口与组合