VSCode中Go模块内同main包函数无法调用问题求助
问题分析与解决
你的问题核心是对Go语言的包划分规则理解有误,具体原因和解决方法如下:
- 包是按目录划分的,不是靠package声明:哪怕两个文件都写了
package main,只要不在同一个目录下,Go就会把它们当成两个完全独立的包。根目录下的main.go属于根目录的main包,而folder1/utils.go属于folder1目录的main包,二者毫无关联,自然无法互相调用函数。 - main包的特殊性不影响这个规则:main包只是程序的入口包,每个可执行程序只能有一个
main函数,但这里的问题本质是跨目录的包隔离,换成其他包名跨目录也会出现同样的引用问题。你改成package utils后能正常运行,是因为此时你可以通过模块路径导入folder1目录下的utils包,从而调用里面的函数。
正确的处理方式
- 如果想让两个文件同属一个
main包:把folder1/utils.go移动到和main.go同级的目录下,这样Go会把它们归为同一个包,就能直接调用DoSomething()。 - 如果要保留当前目录结构:保持
folder1/utils.go的包名为utils(或其他非main的包名),然后在main.go中导入该包:
之后通过import "xservice/folder1"utils.DoSomething()(如果包名是utils的话)来调用函数。
内容的提问来源于stack exchange,提问作者yen
相关产品推荐
相关产品推荐

