Golang中main.go无法识别同目录.go文件导出函数报undefined怎么办?
Go同项目跨包调用导出函数报undefined错误解决
问题描述
运行环境:Windows 10、Go 1.17、安装了Go扩展的VS Code。
Go开发新手在学习过程中遇到如下问题:在main.go所在的同级目录或同级目录的子文件夹中创建其他.go文件,调用对应文件中首字母大写的导出函数时,会收到报错:\main.go:7:2: undefined: SayHi。
示例代码
main.go 文件:
package main import "fmt" func main() { fmt.Println("1st") SayHi() }
存放在/something文件夹下的业务代码文件:
package something import "fmt" func SayHi() { fmt.Println("Hi!") }
复现现象
- 执行
go run main.go、go build、go install命令均会返回SayHi未定义的错误 - 若不调用其他文件的函数,
go run main.go可以正常运行
已尝试的无效操作
- 按照教程执行
go mod init关联github仓库,也按照官方入门指南完成初始化操作,首字母大写的导出函数依然提示未定义 - 编辑器可以正常自动补全SayHi函数,但编译时仍报未定义错误
- 将PATH设置为
C:\Users\xxx\go并把项目文件放在该目录下,也试过使用C:\Go目录,均未解决问题
解决方案
按照以下规则调整项目目录结构即可解决问题:
- 将
main.go放入单独的文件夹中(可命名为app或者main,无强制命名要求) - 项目根目录仅保留
go.mod文件 - 根目录下新建对应业务包的文件夹,例如app、package1、package2等
调整完目录结构后,安装了Go扩展的VSCode在保存文件时会自动添加依赖导入,不需要手动操作。如果将main.go放在根目录,大部分情况下Go编译器无法识别其他模块的函数,会报未定义错误。
内容的提问来源于stack exchange,提问作者fentalyn
相关产品推荐
相关产品推荐

