Golang中如何调用同包不同目录下的函数
Golang中如何调用同包不同目录下的函数 大家好,
我有以下代码结构,并且我正在尝试调用定义在同一个包(main)下但位于不同文件夹中的函数(我不确定这是否有效)。如果这是有效的,那么我的理解是,我应该能够在 main.go 中直接使用定义在另一个“folder1”中的函数,而无需显式导入,对吗?
代码结构: dummy | | ---- main.go | ---- folder_1 | | ---- random.go

错误: 未声明的名称
更多关于Golang中如何调用同包不同目录下的函数的实战教程也可以访问 https://www.itying.com/category-94-b0.html
非常感谢 @christophberger 的极速回复。我会重新修改我的代码。
更多关于Golang中如何调用同包不同目录下的函数的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
嗯 @telo_tade 感谢回复。folder_1 在 dummy 文件夹下(即它是子目录),所以我原本以为既然 dummy 是父文件夹,它应该能够直接使用 folder_1 中的函数而无需显式导入,但我无法做到。
正如 @christophberger 所说,你基本上有两个包:dummy/main 和 folder_1/main。你处理的是两个包,它们恰好都叫做 main。
另请注意,在你的仓库中(例如 myRepo.com/myApp),你可以在第三个包中导入这两个 main 包,并使用它们中的代码,像这样:
import "myRepo.com/myApp/dummy"
import "myRepo.com/myApp/folder_1"
嗨 @Manish,欢迎来到论坛。
Manish: 同一个包(main)但在不同的文件夹中(我不确定这是否有效)
不,这是无效的。根据语言参考,属于同一个包的所有文件必须位于同一个文件夹中:
共享相同 PackageName 的一组文件构成了一个包的实现。实现可能要求一个包的所有源文件都位于同一个目录中。
(包 - Go 编程语言,强调部分由我添加。)
(这里的“实现”指的是 Go 工具链的实现。)
关键在于,导入路径映射到目录。因此,如果你在项目中添加一个目录,它就代表一个新的导入路径。
在Go语言中,同一个包下的所有文件共享相同的包命名空间,无论它们位于哪个目录。这意味着你可以在main.go中直接调用folder_1/random.go中定义的函数,前提是这两个文件都声明为同一个包(例如package main),并且这些函数是导出的(以大写字母开头)。
示例代码结构:
dummy/
├── main.go
└── folder_1/
└── random.go
folder_1/random.go:
package main
import "fmt"
// 导出的函数(大写字母开头)
func RandomFunction() {
fmt.Println("调用了 folder_1 中的函数")
}
// 未导出的函数(小写字母开头)无法在包外部访问
func privateFunction() {
fmt.Println("私有函数")
}
main.go:
package main
func main() {
// 直接调用同包下的函数
RandomFunction() // 正确:函数已导出
// privateFunction() // 错误:未导出的函数不可访问
}
关键点:
- 两个文件必须声明相同的包名(例如
package main)。 - 要调用的函数必须以大写字母开头(导出)。
- 无需导入语句,因为它们在同一个包中。
- 使用
go run或go build时,需要指定所有文件:
或使用通配符:go run main.go folder_1/random.gogo run ./...
如果你的代码结构符合上述要求但仍遇到“未声明的名称”错误,请检查:
- 函数名是否以大写字母开头。
- 两个文件是否都声明了相同的包名。
- 构建命令是否包含了所有相关文件。
如果问题仍然存在,请提供具体的代码片段以便进一步排查。

