go 官方工具链要求每个目录对应一个独立包,因此无法在单个 `main` 包下跨子目录(如 `models/`)存放源文件;若坚持同包,需放弃 `go build` 等标准命令,改用底层编译器直接构建——但该方式缺乏文档支持、不可维护,不推荐。
在 Go 中,包(package)与文件系统目录严格一一对应。这意味着:
✅ 正确做法:遵循 Go 的惯用结构,按功能拆分包
src/myProject/
├── main.go # package main
├── models/ # package models
│ ├── foo.go # package models
│ └── bar.go # package models
└── cmd/ # (可选)显式分离入口
└── myapp/
└── main.go # package main —— 更清晰的入口管理models/foo.go 示例:
package models
type Foo struct {
ID int
Name string
}main.go 中导入使用:
package main
import (
"fmt"
"myProject/models" // 模块路径需匹配 GOPATH 或 go.mod module name
)
func main() {
f := models.Foo{ID: 1, Name: "test"}
fmt.Println(f)
}
⚠️ 注意事项:
总结:Go 的目录即包设计不是限制,而是对代码边界与职责分离的强制约定。接受它,用好它——结构清晰、工具友好、团队协作顺畅,才是真正的工程效率。