go 工具链要求同一包的所有源文件必须位于同一目录下,无法通过配置让编译器跨子目录识别同名

在 Go 中,包(package)与目录(directory)严格一一对应——这是 go build、go run 等命令的核心约定。这意味着:
✅ 正确做法:按功能职责划分包,而非强行塞进同一包
以你的结构为例,推荐重构为:
src/
└── myProject/
├── main.go // package main
└── models/ // package models(独立包)
├── foo.go // package models
└── bar.go // package modelsmodels/foo.go 示例:
package models
type Foo struct {
ID int
Name string
}main.go 中导入并使用:
package main
import (
"fmt"
"myProject/models" // 注意:导入路径基于 $GOPATH 或 module root
)
func main() {
f := models.Foo{ID: 1, Name: "test"}
fmt.Printf("%+v\n", f)
}⚠️ 注意事项:
? 总结:Go 的“一目录一包”不是限制,而是设计哲学——它强制清晰的边界、可复用的单元和可预测的构建行为。拥抱它,用 models、handlers、storage 等语义化包替代扁平文件堆砌,才是规模化 Go 项目的可持续之道。
来电咨询