如何在Go主文件中访问子目录函数?附模块导入解析
Go跨包调用问题解决与模块导入底层逻辑
一、需要修改的内容
- 调整test.go的函数可见性
Go规定只有首字母大写的函数才能被其他包访问,因此要把hloFunc改为HloFunc:
package folder1 import "fmt" // 首字母大写后变为导出函数,允许跨包调用 func HloFunc() { fmt.Println("Hello Function from sub directory") }
- 修正main.go的导入与调用代码
去掉导入路径末尾的多余斜杠,并且调用时必须加上包名前缀:
package main // 导入路径末尾无需添加斜杠 import "testModule/folder1" func main() { // 通过「包名.函数名」的格式调用导出函数 folder1.HloFunc() }
二、模块与包导入的底层逻辑
- 模块(Module):go.mod里的
module testModule是整个项目的根标识,所有子目录的包路径都以此为前缀,比如folder1目录的包路径就是testModule/folder1,导入时必须使用完整的包路径。 - 包(Package):同一目录下的所有Go文件必须声明相同的包名(比如folder1下的test.go用
package folder1),包是Go代码的基本组织单元。 - 访问权限规则:小写开头的标识符(函数、变量、类型等)属于包内私有,只能在当前包内部使用;只有大写开头的标识符才是“导出”状态,允许被其他包引用。
- 调用规则:导入其他包后,必须通过「包名.导出标识符」的方式访问,包名默认对应目录名称(导入时未指定别名的情况下)。
内容的提问来源于stack exchange,提问作者Arjun Malhotra
相关产品推荐
相关产品推荐

